Шлях із перешкодами в подібній грі Warcraft 3


10

Розглянемо пошук A * на карті на основі плитки. Прямий прямий код буде таким: Якщо в цій комірці є одиниця, то це недоступно, це нормально.

Але є проблема вирішення карти. Коли я дивлюся на Warcraft 3, там монстри та структури мають різний радіус, і ви можете ходити дуже близько, що більше схоже на вектор, як це було реалізовано?

Крім того, яке стандартне рішення включати виявлення зіткнення рухомих перешкод з алгоритмом пошуку шляху, як Warcraft 3?


Що означає "векторний"?
jcora

Відповіді:


7

Я не можу сказати точно, який підхід використовували розробники WC3, але він схожий на ієрархічну анотацію A *. Радіус одиниці, визначений у WC3Editor, був використаний як-для 3D-масштабування моделі, але фактичний розмір одиниці для наведення маршруту був дискретним, можливо, щось на зразок unitSize = (int) (unitRadius / 10). Це було не векторно, це точно.

Скажімо, існує безліч вузлів шляху, що роблять сітку вузлів високої роздільної здатності. Простий пристрій, як упир, має розмір 2, тому для того, щоб розмістити його десь у сітці, нам знадобляться 4 вільних вузла шляху один біля одного. Герой лицаря смерті трохи більший з розміром 3, займаючи 9 вузлів шляху. Тепер ми розміщуємо 2 зиггурати разом, залишаючи між собою простір на 2 вузла, а з іншого боку відправляємо вугра та лицаря смерті. Ghoul зможе пройти між двома зигуратами, тоді як лицар смерті повинен буде пересуватися. Як це можна визначити?

Для того, щоб побачити, чи може вузол вмістити одиницю певного розміру, давайте призначимо кожному вузлу спеціальне значення зазору, визначаючи максимально дозволений розмір одиниці. В основному це означає, що було зроблено кілька обмежувальних перевірок для вузла, а найбільші можливі межі запам'ятовувались як зазор вузла. Отже, коли ми хочемо розмістити лицаря смерті на якомусь вузлі, це стає настільки ж просто, як порівняння зазору вузла з розміром лицаря смерті. Звичайно, речі стануть набагато складнішими, коли існує кілька одиниць, що стрибають навколо, змагаючись за вузли, але це вже інша історія.

Для отримання детальної інформації ви можете ознайомитись із цією статтею:

http://harablog.wordpress.com/2009/01/29/clearance-based-pathfinding/


4

Це використовувало б тесселяцію для створення навігаційних сіток AKA-регіонів. Ця стаття пояснює концепцію з повними діаграмами.

Ви все ще можете підтримувати A * як свій підхід до проходження маршруту, однак ваша мережа більше не є сіткою (4-підключений графік), а графіком, що представляє довільну зв’язок між вашими полігональними регіонами. Тож вам доведеться адаптувати свій алгоритм відповідно до цього.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.