Я розробляю невеликий ігровий движок 2D. Персонажі мають метод фарби, який в даний час виконує такі дії:
- Обчисліть нове положення персонажа відповідно до його швидкості тощо.
- Оновіть комірку сітки зіткнення **
- Намалюйте персонажа на новій позиції
** Я створив сітку зіткнення, щоб зменшити кількість перевірок перехрестя
Тепер основним алгоритмом, який я думав для виявлення зіткнення, є:
For Each Character
Check intersection with characters in surrounding 8 cells
Я просто можу розмістити цей код у методі фарби. Але ось проблема, яку я передбачаю.
Припустимо, два символи A і B лежать в сусідніх комірках в сітці зіткнення. Тепер згідно з вищезазначеним алгоритмом в ітерації символу A він виявить, що він зіткнувся з B. У ітерації для символу B він виявить, що він зіткнувся з A.
Але я маю ідею, що коли A виявить, що він зіткнувся з B, він повинен повідомити B, що він зіткнувся з A. Це дозволить заощадити багато порівнянь, коли зіткнеться більше двох акторів. Але я не впевнений, як з цим впоратися. Я думаю, що замість кожного персонажа, який перевіряє його зіткнення, я повинен перевірити на зіткнення всередині ігрового циклу.
Чи був би такий підхід правильним? Як ви вирішили цю проблему? Я сам подумав про сітку зіткнення. Чи є альтернативи логіці сітки зіткнення?