Я занимаюсь разработкой небольшого 2D игрового движка. У персонажей есть метод рисования, который в настоящее время делает следующее:
- Рассчитать новую позицию персонажа по скорости и т. Д.
- Обновить ячейку сетки столкновений **
- Нарисуйте персонажа на новой позиции
** Я создал сетку столкновений, чтобы уменьшить количество проверок пересечения
Теперь основной алгоритм, который я подумал для обнаружения столкновения:
For Each Character
Check intersection with characters in surrounding 8 cells
Я могу просто поместить этот код в метод рисования. Но вот проблема, которую я ожидаю.
Предположим, что два символа A и B лежат в соседних ячейках сетки столкновений. Теперь согласно вышеупомянутому алгоритму в итерации символа A он обнаружит, что он столкнулся с B. В итерации для символа B он обнаружит, что он столкнулся с A.
Но у меня есть идея, что, когда A обнаруживает, что он столкнулся с B, он должен сообщить B, что он столкнулся с A. Это спасло бы много сравнений, когда сталкиваются более двух действующих лиц. Но я не уверен, как справиться с этим. Я думаю, что вместо каждого персонажа, проверяющего его столкновение, я должен проверять наличие столкновения внутри игрового цикла.
Будет ли этот подход правильным? Как вы справились с такой проблемой? Я сам думал о решетке столкновений. Есть ли альтернативы логике коллизионной сетки?