У меня есть некоторые проблемы с запуском алгоритма для моей игры, и я надеюсь, что кто-то здесь может мне помочь. Похоже, 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 все равно можно пропустить препятствие.
Я попытался найти решение, чтобы взять субкарту (все плитки с углами (floor (start.X) / floor (start.Y)) и (ceil (start.X) / ceil (start.Y) ), перемещайтесь по каждой клетке и проверяйте математически, не пересекаются ли они. К сожалению, мне не хватает необходимых математических знаний для этой проверки.
Моя последняя идея состояла в том, чтобы взять все 4 границы тайла как линию и выполнить пересечение линии, но это, кажется, медленнее, чем мой оригинальный подход.
Есть подсказки?
Спасибо.