В настоящее время я работаю над платформерной игрой на C #, поэтому думаю, что могу дать вам несколько советов.
Прежде всего, если вам нужен эффективный алгоритм обнаружения столкновений, я не рекомендуюидти за сложными алгоритмами, которые никто не понимает. Вместо этого я бы остановился на проверке всех сопоставимых объектов в цикле.
Если это станет для вас реальной проблемой производительности, вы можете использовать древовидную структуру (отсортированную по позиции, вероятно) сопоставляемых объектов вместомассив;это означает, что вы собираетесь сначала проверить самые близкие (а значит, наиболее вероятные для столкновения) объекты.
То, что я сделал, было функцией, которая проверяет все сущности на наличие коллизий, и если есть одна return true
. В противном случае return false
. Это означает, что вы не будете тратить время на проверку объектов, если знаете, что произошло столкновение.
Возвращенное логическое значение в основном означает, столкнулись ли вы или нет.
Итак, переместите движущийся элемент, затем проверьте, есть ли столкновения с помощью функции, и, если они есть, отрегулируйте положение и остановите движение.
Я не знаю, если этометоды будут работать для вас, хотя, потому что в моей игре координаты были в основном целыми числами (за исключением прыжка, я делал там некоторые трюки с округлением поплавка), но я думаю, что общая концепция может быть схожей.