У меня проблема не с самим обнаружением столкновений, а с порядком проверки l oop.
Для обнаружения столкновений я использую AABB.
Визуальное представление для справки: https://i.imgur.com/7SaeUjX.png
Сценарий 1:
- У меня есть три квадрата объектов; [игрок], [враг1] и [враг2].
- [враг1] и [враг2] расположены близко друг к другу по горизонтали, а [игрок] находится выше [враг1] .
- Затем игрок начинает двигаться с Стрелка вниз + Стрелка вправо постоянно.
- Так что теперь [игрок] закончил [врага1] и [враг 2] направо.
- Поскольку первым проверяемым элементом является [врага1], система столкновений корректирует положение y [игрока] и, поскольку право не считается сталкивающимся, оно может go вправо.
- РЕЗУЛЬТАТ: все хорошо. [Игрок] может продолжать движение вправо без проблем.
Сценарий 2:
- У меня есть три квадрата объектов; игрок, враг1 и враг 2.
- [враг1] и [враг2] расположены близко друг к другу по горизонтали, а [игрок] находится выше [враг2] .
- Игрок затем начинает двигаться с DownArrow + LeftArrow постоянно.
- Так что теперь [игрок] закончил [врага2] и [враг 1] идет налево.
- Поскольку первый проверяемый элемент - [врага1], система столкновений корректирует позицию у, и позицию х * [1050 *] [игрока], и, конечно, столкновение [врага2] на данном этапе не имеет значения.
- РЕЗУЛЬТАТ: конечно, [игрок] заблокирован [врагами1] и не может продолжать движение влево.
Объяснение проблемы, с которой я столкнулся в Сценарии 2:
Проблема заключается в порядке проверки столкновений. L oop начинает проверять, сталкивается ли игрок с [врагами1] напрямую, потому что проверяется первым, поэтому [игрок], конечно, обнаруживает, что сталкивается с [противником1], и решает 2 столкновения, дающие плохой результат .
Если вы измените порядок списка, начиная с [врага2], то, конечно, проблема возникает наоборот.
Что я должен сделать, чтобы избежать этой ситуации