![]() |
![]() |
32167 |
![]()
Сообщение
#1
|
Группа: Пользователи Сообщений: 2 Пол: Мужской Репутация: ![]() ![]() ![]() |
Такая проблема: есть игра в разработке, похожая по движку на NOX.
В NOX'e объекты представляются в виде цилиндров с основнием в виде окружности. Как сделать чтобы герой, подойдя к преграждающему путь объекту, не стоял как вкопанный(возвращение старых координат),а плавно обходил его(окружность) в оптимальном направлении, как в Ноксе. Известны координаты центра героя(точка), центра окружности, ее радиус, а направление движения(или шаги смещения по X и Y) определяется так же как в Ноксе - положение мышки относительно героя(Эти координаты тоже известны). Должен быть какой-нибудь алгоритм или формула для осуществления плавного обхода преград. Еще желательно решить ту же проблему для столкновения со стенами, которые занимают 2мерный массив. Сообщение отредактировано: 32167 - 18.11.2006 3:19 Эскизы прикрепленных изображений ![]() ![]() |
![]() ![]() |
Archon |
![]()
Сообщение
#2
|
![]() Профи ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 618 Пол: Мужской Репутация: ![]() ![]() ![]() |
Мне вот что в голову пришло:
1. Находим смещение героя без учёта препятствий: dx и dy 2. Проверяем координаты (x+dx, y+dy). Если свободно, идём туда, иначе 3. Проверяем координаты (x+dx, y). Если свободно, идём туда, иначе 4. Проверяем координаты (x, y+dy). Если свободно, идём туда, иначе 5. Стоим Работает если dx <> 0 и dy <> 0. Для строго вертикального или горизонтального движения: Если dx = 0 проверяем координаты (x+/-dy, y) Если dy = 0 проверяем координаты (x, y+/-dx) Получится немного "сТуПеНчАтО" ![]() PS Толькочто понял, что работает только если подходить под острыми углами... Можно попробовать проверять не только x+dx, а ещё и x-dx (c y аналогично). Если ещё чего надумаю, отпишусь. Сообщение отредактировано: Archon - 23.11.2006 2:31 -------------------- Close the World...txeN eht nepO
|
![]() ![]() |
![]() |
Текстовая версия | 15.07.2025 8:31 |