Управление обнаружением столкновений в играх

Так что мой вопрос не о том, как обнаруживать столкновения, а в более широком смысле: какой код должен содержать обнаружение столкновений. '. В прошлом я писал некоторые игры (относительно простые 2D-флеш-игры), и это заставило меня задуматься о том, в каком коде должно быть обнаружено столкновение?

Позвольте мне уточнить - скажем, в игре у меня есть группа врагов и группа снаряды, выпущенные игроком. Итак, в прошлом я говорил классу EnemyManager, что каждый кадр обновляет позиции врагов, и аналогично для снарядов игрока был класс PlayerProjectilesManager, который перемещался вокруг пуль. Круто - все нормально и шикаренно. Но затем я решаю, что хочу, чтобы пули воздействовали на врагов (безумно, я знаю!). Это означает, что где-то в коде мне нужно:

  1. Выяснить, какие пули и враги сталкиваются (мне все равно, как ответить на этот вопрос)
  2. Выяснить реакцию на каждое столкновение

Итак, в основном, что я Раньше мы делали так, чтобы класс EnemyManager «владел» столкновениями, и во время цикла обновления он находит пули игрока, которые сталкиваются с вражескими пулями (например, шаг 1), а также вызывает код для обоих объектов для обработки столкновение (например, противник теряет здоровье, пуля исчезает) (т.е. Шаг 2). Итак, я передал управление обнаружением столкновений и их «реакцией» на EnemyManager.

Пара комментариев по этому поводу:

  • Мне кажется произвольным, что EnemyManager находится в ' control 'вместо PlayerProjectilesManager
  • Обнаружение столкновений и «реакция» на столкновения обрабатываются одним и тем же владельцем, это не требование с моей точки зрения

То, что формируется в моей голове, - это сторонняя сущность, управляющая столкновениями обнаружение. Например, у CollisionManager есть код, который знает, какие другие менеджеры должны обнаруживать столкновения. Это приводит к другим вопросам, например, какие интерфейсы должны открывать «менеджеры» для эффективного обнаружения столкновений, не подвергая CollisionManager слишком много внутренностей. Затем я предполагаю, что CollisionManager транслирует какое-то событие, содержащее столкновение двух объектов и т. Д., И, возможно, EnemyManager / PlayerProjectilesManager может отдельно прослушивать эти события и реагировать соответственно и отдельно. Начинаю обретать смысл в моей голове. :)

Мысли? Почти в каждой игре есть обнаружение столкновений, поэтому я уверен, что это уже обсуждалось ранее. :)

16
задан UnknownGuy 30 November 2010 в 06:12
поделиться