Слідом проходив шлях


9

В даний час я роблю 2-х грі оборонної вежі зі статичною, заздалегідь визначеною смугою, за якою слідують вороги (тобто вежі не можуть перекрити шлях і пошук шляху - це не проблема, яку я намагаюся вирішити).

Я намагаюся зрозуміти, як саме змусити підрозділи плавно рухатись по цій смузі . У мене є дві грубі ідеї, як це зробити, але мені б хотілося, щоб деякі матеріали, які, швидше за все, було легше здійснити / більш стандартна методика. Або звичайно, якщо у мене є якийсь абсолютно інший спосіб, про який я не вважав, що хотів би дізнатися і про це.

Точкові точки: Моя перша ідея полягала в тому, щоб визначити шлях як ряд жорстко закодованих точкових точок. Потім одиниці використовуватимуть базовий алгоритм рульового керування (наприклад, цей ) для переміщення до кожної точки маршруту послідовно. Однак я задумався, чи може бути важко утримати відхилення підрозділів у значній мірі від смуги, за якою я хочу їх виконувати. Мені цікаво, чи неможливість досить різкого повороту може призвести до того, що вони начебто «скочуються» з потрібної смуги. Я припускаю, що я міг би запобігти цьому, дозволяючи застосувати відносно сильну рульову силу?

Криві Безьє: Друге рішення, яке я розглядав, - це визначити шлях за кривою Безьє і під час кожного кроку обчислювати точку вздовж кривої з (dt * швидкістю) від поточного розташування одиниці. Я підозрюю, що ця методика значно полегшила б точно визначити шлях, який будуть слідувати одиниці, але я не знаю, як саме йти до цього. Будь-які пропозиції?

Крім того, я не знаю, це змінить чиїсь відповіді, але одиниці також повинні мати можливість рухатися з постійною швидкістю по шляху. Крім того, я програмую цю гру в python, використовуючи структуру pyglet.

Якщо щось із цього питання незрозуміле, будь ласка, дайте мені знати.

Редагувати: Також, як би там не було, я намагаюся повторити поведінку ворогів у " Королівському піску" .


Відповідно: gamasutra.com/view/feature/131505/… Яку щільність / розмір одиниці щодо плитки ви використовуєте?
мавпа

Я погляну на цю статтю! Я фактично не використовую плитки, а лише суцільні координати для позначення позиції. Буде просто статичне фонове зображення, яке показує гравцеві, куди рухатимуться одиниці.
Pwnosaurus

Я теж знайшов. gamedev.stackexchange.com/questions/26543/… A * працює на немережевих картах. Це може бути шлях вузла до королівства, який викривляється аналогічно.
мавпа

Чи є щось, що може змусити ворогів піти з шляху і доведеться повертатися на нього? Я запитую, тому що Ваша пропозиція про кривку Безьє передбачає, що її немає, і в цьому випадку немає причини, щоб Ви не могли попередньо обчислити довільні дані про весь шлях, і не потрібна логіка "AI".
Кевін Рейд

Відповіді:


8

Дозвольте познайомити вас із відомим документом Крейга Рейнольдса про рульові поведінки для автономних персонажів . Якщо ви ще не прочитали її, то це допоможе вам розібратися в таких проблемах, зокрема погляньте на розділ про проходження маршрутів .

введіть тут опис зображення

Ідея статті Рейнольдса полягає в тому, що ви можете використовувати прості сили, які поєднуються для створення життєвої, імпровізованої навігації навколо навколишнього середовища. Рухи не ґрунтуються на плануванні шляху чи глобальних обчисленнях, а натомість використовують локальну інформацію, таку як сили сусідів, яка робить їх простими для розуміння та реалізації, але все ж створює дуже складні структури руху.

Краса підходу полягає в тому, що ви можете поєднати кілька поведінки разом. Так, наприклад, у ваших персонажів може бути як поведінка щодо пошуку шляху, так і поведінка розлуки (щоб не занадто сильно збиватися), що може поєднуватися як зважена сума.

Ще однією перевагою використання поведінки рульового управління є те, що існує ряд існуючих реалізацій з відкритим кодом на різних мовах (наприклад, openteer ).


ОНОВЛЕННЯ: Я подивився на Kingdom Rush, і, думаю, я неправильно зрозумів, що ви мали на увазі під «плавно». Я вважав, що це означає більш реалістично, але я думаю, що ти, що ти хочеш, більше схожий на героїв на поїзді. Також, читаючи більш уважно, я бачу, що одна з ваших вимог полягає в тому, що "одиниці повинні мати можливість рухатися з постійною швидкістю по шляху". Керівництво поведінки не дасть вам постійної швидкості руху, але просте накладання маршруту в поєднанні з точковими точками буде. (Тобто, не використовуйте поведінку "шукати", щоб дістатися до точки маршруту, а просто визначте вектор напрямку та примусьте одиницю рухатися на повній швидкості до цієї точки.) Використовуйте більше точок, щоб згладити маршрут.


2

Рішення в цій статті про Gamasutra може бути тим, що ви шукаєте. Основна ідея полягає в тому, щоб кинути промені на точку, що знаходиться на два кроки до вашої поточної точкової точки "ступаючи" промінь на частину довжини комірки і при кожному "кроці" променів перевіряючи, чи стикається об'єм зіткнення вашого гравця з чим-небудь у ступінчастому положенні променя. Якщо промінь пройде весь шлях до точки, що на два кроки попереду, то ви можете позбутися посередництва. потім ви можете продовжити цей самий процес аж до точки "мети" ... таким чином, якщо ваш шлях можна здійснити прямою лінією до мети, пряма до цілі - це маршрут, який пройде ваш персонаж. ось стаття: http://www.gamasutra.com/view/feature/131505/toward_more_realistic_pathfinding.

Він також містить чудові речі про радіус повороту та більш природні повороти поведінки і таке ...

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