куда должна идти логика повреждения игрового движка или класса персонажа - PullRequest
1 голос
/ 22 мая 2010

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

Ответы [ 3 ]

4 голосов
/ 22 мая 2010

Это во многом зависит от правил игры. Тем не менее, это не является необычным для нескольких объектов, которые должны быть вовлечены. Однако я бы не советовал помещать код правил игры в экземпляр MovieClip, который отображает объект; сохранение их в качестве пиров позволяет легче разделять и сохранять / передавать игровое состояние.

Вот пример:

  • Актер А начинает атаку.
    • Актер A предоставляет значение точности (бросок попадания).
    • Оружие (или боеприпасы, если применимо) обеспечивает базовое значение урона (бросок урона) и тип урона.
    • Тип оружия определяет, как способности Актора А изменяют бросок удара и бросок урона.
    • Модификаторы на оружии могут изменять броски, добавлять дополнительные компоненты урона или ассоциировать "атакующие" эффекты с атакой.
  • На данный момент кажется, что формируется класс объекта атаки, содержащий следующее:
    • Значение точности
    • Набор типичных повреждений (может быть пустым для атак только с эффектами)
    • Коллекция дополнительных эффектов (возможно, пустых)
  • Теперь атака достигает цели.
    • Спецэффекты на цель, срабатывающие при атаке, могут сработать.
    • Цель может иметь много уровней защиты - например, прикрытие, сокрытие, уклонение, отклонение, блокирование, броня и естественная броня. Любое или все из них может способствовать провалу атаки.
  • Атака соединяется.
    • Спецэффекты на цель, срабатывающие при ударе, могут исчезнуть.
    • У цели также может быть возможность уменьшения урона или ее устранения, например, броня, достаточно тяжелая для поглощения части атаки, или иммунитет / сопротивление / слабость к одному или нескольким конкретным типам атаки.
  • Фактический урон теперь можно устранить. Это может быть ноль, если атака была точной, но неэффективной.
    • Спецэффекты, связанные с разрешением атаки.
      • Некоторые из них могут зависеть от повреждений, таких как яд от травм.
      • Некоторые могут быть безусловными, например, отключение пакета.
    • Спецэффекты на цель, которые срабатывают при повреждении, такие как реактивная броня или урон от «шипов», могут сработать.
2 голосов
/ 22 мая 2010

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

Я не знаю много о том, какую игру вы делаете.Но для некоторых игр, когда движку сообщают, что A атакует B, код может выглядеть примерно так:

//somewhere in your engine:
damage = A.get_damage(B);
trace (damage); // {damage:60, hit_chance = 0.8}
B.send_damage(damage);

Я считаю, что в большинстве случаев необходимо иметь B.send_damage(), а не движокнепосредственно контролируя атрибут здоровья Б. ИИ, как правило, зависят от состояния.Вероятно, будут некоторые переменные, которые являются исключительными для A или B, которые влияют на урон (например, непобедимость), и (IMO) лучше, чтобы двигатель не знал об их существовании (или вы в конечном итоге получите огромные блоки переключателей;)

Вы видите, как я должен был отправить B в качестве аргумента в A.get_damage()?К сожалению, это часто необходимо при таком подходе.Урон A / Hit_chance может зависеть от того, как далеко B находится от A.

0 голосов
/ 22 мая 2010

Поместите это в движок игры. Объекты на экране представляют представления и контроллеры в вашей модели, движке (к которому относится такая логика). Хотя может показаться заманчивым поместить его непосредственно в сторону вида / контроллера, код вашей игры со временем превратится в спагетти, когда он станет достаточно большим.

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