Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

обход преград в warcraft'е [Delphi, Windows]


keal ©   (2005-05-27 14:32:00) 

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


OSokin   (2005-05-31 18:35:00) [1]

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

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


Zer0   (2005-05-28 17:42:00) [2]

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


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

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


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

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

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


OSokin   (2005-05-27 21:42:00) [5]

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


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

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


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

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


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

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

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

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

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


XProger   (2005-05-27 17:09:00) [9]

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


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

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


XProger   (2005-05-27 15:08:00) [11]

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


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

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


miek   (2005-05-27 14:39:00) [13]

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


Наверх

Титульная страница Поиск, карта сайта Написать письмо