Так что мой вопрос не о том, как обнаруживать столкновения, а о том, какой код должен иметь обнаружение столкновений.В прошлом я писал некоторые игры (относительно простые 2D Flash-игры), и это заставило меня задуматься о том, какой код должен иметь обнаружение столкновений?
Позвольте мне уточнить - скажем, в игре у меня есть группа врагов игруппа снарядов, выпущенных игроком.Так, в прошлом я говорил, например, класс EnemyManager, что каждый кадр обновляет позиции врагов, а также для снарядов игрока был класс PlayerProjectilesManager, который перемещался вокруг пуль.Это круто - все хорошо и модно.Но затем я решаю, что хочу, чтобы пули воздействовали на врагов (сумасшедший, я знаю!).Это означает, что где-то в коде мне нужно:
- Выяснить, какие пули и враги сталкиваются (мне все равно, как на этот вопрос)
- Выяснить реакцию накаждое столкновение
Итак, в основном то, что я делал в прошлом, это просто взял класс EnemyManager в «владение» столкновениями, и во время своего цикла обновления он находит пули игрока, которые сталкиваются с пулями противника.(т.е. шаг 1), а также вызывает код для обоих объектов для обработки столкновения (например, враг теряет здоровье, пуля исчезает) (то есть шаг 2).Поэтому я дал контроль над обнаружением столкновений и «реакцией» столкновений на EnemyManager.
Пара замечает по этому поводу:
- Мне кажется, что EnemyManager находится под «контролем», а не PlayerProjectilesManager
- Обнаружение столкновений и столкновений как «контролируется»«Реакция» обрабатывается одним и тем же владельцем, с моей точки зрения это не является обязательным требованием
По моему мнению, стороннее юридическое лицо, управляющее обнаружением столкновений.Например, есть CollisionManager, в котором есть код, который знает, какие другие менеджеры должны обнаруживать коллизии.Это приводит к другим вопросам, таким как, какие интерфейсы «выставляют» менеджеры для эффективного обнаружения столкновений, не подвергая CollisionManager слишком многим внутренностям.Затем я полагаю, что CollisionManager передает какое-то событие, содержащее два объекта, столкнувшихся и т. Д., И, возможно, EnemyManager / PlayerProjectilesManager может отдельно прослушивать эти события и реагировать соответственно и раздельно.Начинаю иметь смысл в моей голове.:)
Мысли?Почти в каждой игре есть обнаружение столкновений, поэтому я уверен, что это обсуждалось ранее.:)