Могут ли системы достижений быть внедрены позже в процессе разработки?

12

Я не знаю, хочу ли я реализовать эту функцию в моей игре в то время или нет. Я не хочу, чтобы проект вышел из-под контроля, поэтому сначала я сосредоточусь на механике ядра.

Является ли это функцией, которую легко реализовать позже, если предположить, что я управляю данными и храню все?

Брайан Харрингтон
источник
3
Пару лет назад я перенес какую-то известную игру для DOS в Windows - одна из вещей, которую я бы хотел добавить к ней, если бы мы собирались внести какие-либо изменения в игровой процесс, - была бы достижением. Так что, если бы я мог добавить достижения к более чем 10-летней игре, явно не предназначенной для нее, я бы сказал, что их можно добавлять где угодно. Черт, у этого самого сайта есть достижения ..
Яри ​​Комппа

Ответы:

19

Вы спрашиваете с точки зрения технических особенностей реализации или последствий проекта? В любом случае, ответ на ваш вопрос «да».

С технической стороны, вообще говоря, вы просто находите в своем коде хуки, которые реагируют на ваши достижения, и вставляете туда свой код отслеживания статистики. Возможно, вам придется добавить некоторые новые вещи, если вы отслеживаете вещи, которые не являются точно дискретными событиями, которые уже происходят в игре (например: X количество сыгранных часов).

Что касается дизайна, то, конечно же, достижения являются внешними мотиваторами, и их добавление не играет большой роли в основной игровой цикл, за исключением людей, которые хотят их найти. Так что они довольно безопасны независимо.

тетрада
источник
Да, я делаю это сейчас. Было довольно легко связать в shotsFired++части, где создаются новые пули, и shotsHit++в части, где пуля воздействует на другого игрока. Помогло то, что я отследил, кто стрелял какой пулей (потому что я использую информацию, чтобы отследить, кто получил то, что убил и т. Д.)
bobobobo
5

При условии, что ваш игровой движок хорошо спроектирован и использует какую-то наблюдаемую систему событий (где события генерируются и прослушиваются заинтересованными сторонами), довольно просто «подключить» систему достижений на более позднем этапе (добавив соответствующие слушатели). Этот вид дизайна очень гибкий.

Moo-Сок
источник
2

Поскольку уже существующие люди добавили хорошие ответы, позвольте мне ответить на непокрытые ситуации.

Если вы вообще находитесь в положении, когда вы завершили кодирование своей игры и теперь начинаете кодировать достижения и обнаруживаете, что очень сложно поддерживать слишком много переменных и счетчиков и очищать их при определенных событиях и тому подобном.

Вы всегда можете создать один класс (предпочтительно синглтон) для получения всех событий. Теперь перечислите все ваши достижения. Затем перечислите все игровые события, которые необходимо отслеживать. Например, мой текущий список выглядит так

KILL ENEMY - ходьба, пули, смерть игрока - падение, здоровье, ENTER_ROOM, EXIT_ROOM и т. Д.

Эти дополнительные детали, такие как ходьба, пули, могут быть параметрами. Теперь есть одна функция с именем fireEvent в этом классе отслеживания достижений. Поиск всех мест в коде, где вам нужно fireEvents и вызвать эту функцию. Теперь сделайте всю грязную работу в классе достижений. Это самый безопасный способ не нарушать существующий код и его достижения. Это сработало довольно быстро для меня.

Раджаванья Субраманиан
источник
Это действительно хорошее решение для реализации после разработки. Я буду помнить это, потому что я все еще не уверен, хочу ли я реализовать это. Я мог бы сделать это на более позднем этапе, потому что я не хочу, чтобы область моего проекта вышла из-под контроля.
Брайан Харрингтон