Я не знаю, хочу ли я реализовать эту функцию в моей игре в то время или нет. Я не хочу, чтобы проект вышел из-под контроля, поэтому сначала я сосредоточусь на механике ядра.
Является ли это функцией, которую легко реализовать позже, если предположить, что я управляю данными и храню все?
game-design
achievements
Брайан Харрингтон
источник
источник
Ответы:
Вы спрашиваете с точки зрения технических особенностей реализации или последствий проекта? В любом случае, ответ на ваш вопрос «да».
С технической стороны, вообще говоря, вы просто находите в своем коде хуки, которые реагируют на ваши достижения, и вставляете туда свой код отслеживания статистики. Возможно, вам придется добавить некоторые новые вещи, если вы отслеживаете вещи, которые не являются точно дискретными событиями, которые уже происходят в игре (например: X количество сыгранных часов).
Что касается дизайна, то, конечно же, достижения являются внешними мотиваторами, и их добавление не играет большой роли в основной игровой цикл, за исключением людей, которые хотят их найти. Так что они довольно безопасны независимо.
источник
shotsFired++
части, где создаются новые пули, иshotsHit++
в части, где пуля воздействует на другого игрока. Помогло то, что я отследил, кто стрелял какой пулей (потому что я использую информацию, чтобы отследить, кто получил то, что убил и т. Д.)При условии, что ваш игровой движок хорошо спроектирован и использует какую-то наблюдаемую систему событий (где события генерируются и прослушиваются заинтересованными сторонами), довольно просто «подключить» систему достижений на более позднем этапе (добавив соответствующие слушатели). Этот вид дизайна очень гибкий.
источник
Поскольку уже существующие люди добавили хорошие ответы, позвольте мне ответить на непокрытые ситуации.
Если вы вообще находитесь в положении, когда вы завершили кодирование своей игры и теперь начинаете кодировать достижения и обнаруживаете, что очень сложно поддерживать слишком много переменных и счетчиков и очищать их при определенных событиях и тому подобном.
Вы всегда можете создать один класс (предпочтительно синглтон) для получения всех событий. Теперь перечислите все ваши достижения. Затем перечислите все игровые события, которые необходимо отслеживать. Например, мой текущий список выглядит так
KILL ENEMY - ходьба, пули, смерть игрока - падение, здоровье, ENTER_ROOM, EXIT_ROOM и т. Д.
Эти дополнительные детали, такие как ходьба, пули, могут быть параметрами. Теперь есть одна функция с именем fireEvent в этом классе отслеживания достижений. Поиск всех мест в коде, где вам нужно fireEvents и вызвать эту функцию. Теперь сделайте всю грязную работу в классе достижений. Это самый безопасный способ не нарушать существующий код и его достижения. Это сработало довольно быстро для меня.
источник