Проблема обнаружения столкновений с заказом l oop - PullRequest
0 голосов
/ 15 апреля 2020

У меня проблема не с самим обнаружением столкновений, а с порядком проверки 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], то, конечно, проблема возникает наоборот.

Что я должен сделать, чтобы избежать этой ситуации

1 Ответ

0 голосов
/ 22 апреля 2020

Хорошо, после поиска и обдумывания решения я получил следующее:

Мой менеджер коллайдеров теперь работает следующим образом (3 шага):

  • Находит перекрытия
  • Собирает информацию о столкновении
  • Сортирует столкновения по перекрывающейся области (собранные в информации) и решает

Итак, главное отличие в том, что я сначала проанализируйте все перекрытия / коллизии, а после этого я обработаю их, в этом случае сортировка по области перекрытия

Надеюсь, это поможет

...