Поведінкові дерева :: Дії, що тривають довше, ніж один тик


19

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

Так, наприклад, нижче зображено дерево поведінки:

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

Тепер давайте припустимо, що поведінка Drive to Enemy на дереві займає більше кількох ітерацій. Тож на кожному проході Drive To Enemy викликається, оскільки він зараз знаходиться в робочому стані.

Проблема в тому, що я хочу зателефонувати Еваде Ворогу, якщо ворог знаходиться поруч. І зважаючи на те, що Drive To Enemy завжди називається, я ніколи не отримую можливості зателефонувати ухилитись від Eney ( Мабуть, слід називати Avoid Enemy ).

  • Чи повинен я пройти Дерево EACH пройти незалежно від того, яка дія в даний момент виконується?
  • Чи я буду про це правильно?
  • Який правильний спосіб поводження з такою поведінкою?

Спочатку запитували на Stackoverflow. Думаю, що тут було б більш підходящим місцем поставити це питання.


1
Чи допомагає надана тут відповідь? gamedev.stackexchange.com/questions/51693/…
Tetrad

Це теж моє запитання. Я збирався опублікувати це питання як коментар, але вважав, що це має бути окремим питанням.
Безкоштовний лончер

Відповіді:


16

Дивіться зображення, яке я надав у своїй попередній відповіді :

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

Якщо ви уявляєте, що вузол 1 - це «Ухилитися ворогом», а вузол 2 - «Переслідувати ворога», ви побачите, що навіть у другій ітерації (коли все зелене, окрім '2' та 'B', коли це друга ітерація починається), "Ухилення ворога" все-таки перевіряється першим. Тільки тоді, коли "Ухилення ворога" не вдається, оскільки ворогів поруч немає, "Chase Enemy" знову активується. Коли "Chase Enemy" знову відвідується, він помічає, що він перебуває у "запущеному" стані та переходить безпосередньо до "B".

Це означає, що кожного разу, коли дерево перевіряється, воно завжди буде переходити зліва направо. Навіть коли вузол позначений як працює, вузли вищого пріоритету все ще перевіряються спочатку.

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


2
Дякую за ще одне чудове пояснення. Мені важко було зрозуміти рекурсивний характер дерев поведінки. Я збирався попросити вас у коментарі останнього запитання, але не хотів перетворити коментарі на довгий QA. Останнє питання, хоча це все має сенс. Чи є різниця між селекторами та послідовностями в обробці запущених станів? Схоже, що Селектор (Вузол 0) спочатку перевірив Вузол 1, тоді як послідовність «Вузол 2» не перевірив Вузол А, на другій ітерації.
Безкоштовний Lancer

4
Добре запитання, я думаю, ви це отримуєте. Вузол 2 не перевірив вузол A, оскільки його вузол A був завершений. Коли вузол 2 позначений як "Запуск", він зазначає, що вузол В - це вузол, який зараз працює. Можна припустити, що якщо працює вузол, це означає, що попередні вузли не потрібно перевіряти ще раз.
MichaelHouse

Ви скидаєте кореневий селектор (0) до "ГОТОВО" після того, як після першого ітерації було встановлено значення "РУННЯ"?
Безкоштовно Lancer

Я вважаю, що тільки батько запущеного вузла налаштований на запуск. Корінь потрібно встановити готовий, а не запускати, тому що нам потрібно ще раз проаналізувати вузол (1).
MichaelHouse

3
Це один варіант. Ви можете фактично оновлювати його так часто або нечасто, як вам подобається. Кожні 300 мс, якщо ви хочете, або кожен кадр. Або ви можете мати фіксоване оновлення, а також спрацьоване оновлення для вирішення будь-яких подій. Дерева поведінки, як і у більшості подібних структур, не є чітко визначеними. Їх слід використовувати найкращим чином для вашої гри. Якщо ви оцінюєте кожен кадр занадто марно, тоді не робіть цього. Ви також можете обмежити кількість часу, витраченого на оцінку дерева, та забрати наступний кадр, якщо хочете. Варіантів дуже багато.
MichaelHouse
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.