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