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