У меня есть некоторые проблемы с алгоритмом работы моей игры, и я надеюсь, что кто-то здесь может мне помочь. Google не показался хорошим помощником, так как большинство решений работают только для полных плиток.
В игре юниты могут занимать разные позиции внутри плитки, т.е. они могут быть в верхнем левом углу, в центре, внизу справа, ... позиция плитки (2/3), т.е. (2,2/3,1), (2,5/3,5 ), (2,8/3,9).
Если они перемещаются из положения (2.2/3.1) в (5.7/4.1), мне требуется проверка, чтобы увидеть, есть ли препятствие на пути.
Мой текущий алгоритм:
- Начиная с (2.2/3.1)
- Рассчитайте угол движения (т.е. 70 градусов)
- Переместиться на 0,1 шага в этом направлении
- Проверьте, на какой плитке я нахожусь (этаж (p.X)/этаж (p.Y))
- Повторить с 2
Этот алгоритм работает, но мне он кажется не очень эффективным, так как препятствием может быть только целая плитка, а не часть плитки (юниты не сталкиваются). Если я увеличу размер шага, я начну пропускать плитки, которые лишь слегка пересекаются (т.е. вы пересекаете только нижний левый угол). Даже при размере шага 0,1 все еще можно пропустить препятствие.
Я попытался найти решение, чтобы взять дополнительную карту (все плитки с углами (пол (начало.X)/этаж (начало.Y)) и (потолки (начало.X)/потолки (начало.Y)), переместить через каждую плитку и проверить математически, если он пересекается.К сожалению, мне не хватает необходимых математических знаний для этой проверки.
Моя последняя идея состояла в том, чтобы взять все 4 границы плитки в виде линии и выполнить пересечение линий, но это кажется медленнее, чем мой первоначальный подход.
Любые подсказки?
Спасибо.