Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.10.02;
Скачать: CL | DM;

Вниз

обход преград в warcraft е   Найти похожие ветки 

 
keal   (2005-05-27 14:32) [0]

может кто-то знает какой алгоритм поиска пути и обхода преград используется в warcraft"е, ведь там все юниты имеют не квадратную основу, а круглую и все разных размеров.


 
miek ©   (2005-05-27 14:39) [1]

Обычный волновой алгоритм, только перемещаться можно не по 4-м направлениям, а по всем 8-ми (или 6-ти, не помню). Для ускорения - пока юнит не попадет в тупик, волна делается небольшая, потом увеличивается.


 
keal   (2005-05-27 14:48) [2]

юниты не находятся на квадратах карты, они имеют дробные координаты и круглую форму. а если и находятся на квадратах, то многие из них занимают сразу несколько квадратов.


 
XProger ©   (2005-05-27 15:08) [3]

keal, ты хочешь сказать что астар и волновик только для квадратных подходят?
ок... а как тогда в CS боты по вейпоинтам дорогу находят? ;)


 
keal   (2005-05-27 15:19) [4]

почему же, астар и волновик подходят для ячейки с 4, 6, 12.. направлениями. почти для любого.
а если координаты измеряються типа (14.77, 51.211).


 
XProger ©   (2005-05-27 17:09) [5]

А если понять что ты программист и должен думать абстрактно?


 
keal   (2005-05-27 17:20) [6]

я и думаю абстрактно, или я думаю, что так думаю...

все в конечном итоге упирается в размер карты. координаты дробные, значит точность местонахождения юнита должна быть большая, значит и карта имеет большие размеры.

выхожу из положения используя волну и некоторые добавления для работы с картой.

можно предварительно обработать карту, но остаются юниты, которые появляются в динамике.


 
XProger ©   (2005-05-27 17:28) [7]

Есть карта. Вся делится на квадратики. Квадратик может быть занят и свободен. Есть юниты которые квадратики не занимают, а просто не подпускают к себе никого и ничего ближе чем радиус их БиСферы.
Ищем путь по этив квадратикам (плевать как).
Юнит может находиться в нецелых координатах в квадратике
[trunc(PosX) div Size, trunc(PosY) div Size]
Где Size - размер одного квадартика. Далее игрок идёт к следующему квадратику т.е. поход на (Size, Size) относительно текущей позиции... и т.д. до самого конца.
При этом заметь, что варкрафте толпа двигалась не хаотично, а выстраивалась в определённый ряд чтобы друг-другу не мешать.


 
keal   (2005-05-27 17:39) [8]

они строятся в линию первого поворота или моста.
проведу пару эксперементов в варкрафте, уже больно классная там система перемещения унитов.


 
OSokin ©   (2005-05-27 21:42) [9]

Имхо, можно так: вычисляется угол по касательной по прямой, по которой должен следовать чел, если произошел коллижен с каким-либо препятствием, то не пускаем чела дальше препятствия и постоянно вычисляем новый угол. Если старая и новая координаты совпадают, то применяем любой другой подход (можно просто поставить на время случайный угол), а потом снова начинаем вычисления угла. Немного трудоемко, но того стоит :-).


 
keal   (2005-05-28 15:33) [10]

с углом я уже делал, эфективно, пока юнит не застрянет на какой-нибудь кочке.

сейчас пробую объеденить волну с углом.


 
П7   (2005-05-28 16:25) [11]

Ну вот вы мне объясните, чем вам вей-поинты не катят?


 
Zer0 ©   (2005-05-28 17:42) [12]

Можно сделать так: искать путь любым "клеточным" методом - а потом срезать получившиеся "углы" проверкой - пройдет ли юнит по этому пути ничего не задевая.  В сети помойму даже лежали примеры таких pf на паскале.


 
OSokin ©   (2005-05-31 18:35) [13]

keal   (28.05.05 15:33) [10]
Дык если застрянет, то

> применяем любой другой подход (можно просто поставить
> на время случайный угол), а потом снова начинаем
> вычисления угла



Страницы: 1 вся ветка

Текущий архив: 2005.10.02;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.026 c
1-1126069684
wertolet
2005-09-07 09:08
2005.10.02
компонент не удаляется в дизайнтайм


1-1126126501
WonderfulDay
2005-09-08 00:55
2005.10.02
Thread.priority>=tpNormal;


1-1126552103
kblc
2005-09-12 23:08
2005.10.02
TPageControl


3-1124250355
set666
2005-08-17 07:45
2005.10.02
Определить имя пользователя


1-1126250851
alsov
2005-09-09 11:27
2005.10.02
Устройство работающее через COM порт