Drzewa zachowań :: Akcje, które trwają dłużej niż jeden tyk

19

Z tego, co rozumiem na Drzewach Zachowań, każde Zachowanie powinno być krótką Akcją zorientowaną na cel, którą można wykonać w kilku iteracjach.

Na przykład poniżej obraz drzewa zachowań:

wprowadź opis zdjęcia tutaj

Załóżmy teraz, że zachowanie Drive To Enemy wymaga więcej niż kilku iteracji w drzewie. Tak więc przy każdym przejściu wywoływany jest Drive To Enemy, ponieważ jest on teraz w stanie uruchomionym .

Problem polega na tym, że chcę zadzwonić do Uciekającego Wroga, jeśli wróg jest w pobliżu. Biorąc pod uwagę, że Drive To Enemy jest zawsze nazywany, nigdy nie mam szansy zadzwonić do Evade Enemy ( prawdopodobnie powinienem nazywać się A unikanie wroga ).

  • Czy powinienem przemierzać Drzewo KAŻDĄ przepustkę bez względu na to, co aktualnie działa?
  • Czy zamierzam to zrobić we właściwy sposób?
  • Jaki jest właściwy sposób postępowania z takim zachowaniem?

Pierwotnie zadany w Stackoverflow. Pomyślę tutaj, że byłoby właściwszym miejscem do zadawania tego pytania.

Wolny strzelec
źródło
1
Czy udzielona tutaj odpowiedź pomaga? gamedev.stackexchange.com/questions/51693/...
tetradê
To także moje pytanie. Zamierzałem opublikować to pytanie jako komentarz, ale pomyślałem, że powinno to być osobne pytanie.
Wolny Lancer

Odpowiedzi:

16

Zobacz obraz, który podałem w mojej poprzedniej odpowiedzi :

wprowadź opis zdjęcia tutaj

Jeśli wyobrażasz sobie, że węzeł 1 to „Unik wroga”, a węzeł 2 to „Chase Enemy”, zobaczysz to, chociaż w drugiej iteracji (gdy wszystko jest zielone z wyjątkiem „2”, a „B” to druga iteracja zaczyna się), „Evade Enemy” nadal jest sprawdzany jako pierwszy. Tylko wtedy, gdy „Unik wróg” zawodzi, ponieważ w pobliżu nie ma żadnych wrogów, „Chase Enemy” zostaje ponownie aktywowany. Po ponownym odwiedzeniu „Chase Enemy” zauważa, że ​​jest w stanie „biegania” i przechodzi bezpośrednio do „B”.

Oznacza to, że za każdym razem, gdy drzewo jest sprawdzane, zawsze będzie przechodzić od lewej do prawej. Nawet gdy węzeł jest oznaczony jako uruchomiony, węzły o wyższym priorytecie są nadal sprawdzane jako pierwsze.

Nie jestem pewien, czy masz zamiar przetwarzać swoje węzły od prawej do lewej, ale wydaje się, że tak je ułożysz (tzn. Pod wrogiem unikania, zlokalizuj wroga po prawej stronie napędu w przeciwnym kierunku). Jeśli potrzebujesz dodatkowych wyjaśnień, powinieneś zadać je na czacie lub w jednym z istniejących pytań na ten temat.

MichaelHouse
źródło
2
Dzięki za kolejne świetne wyjaśnienie. Trudno mi było zrozumieć rekurencyjną naturę drzew zachowania. Chciałem cię zapytać w komentarzu do ostatniego pytania, ale nie chciałem zamienić komentarzy w długą kontrolę jakości. Ostatnie pytanie, to wszystko ma teraz sens. Czy istnieje różnica między selektorami a sekwencjami w obsłudze stanów biegu? Wygląda na to, że Selektor (Węzeł 0) najpierw sprawdził Węzeł 1, podczas gdy sekwencja „Węzeł 2” nie sprawdziła Węzła A podczas drugiej iteracji.
Wolny Lancer
4
Dobre pytanie, myślę, że rozumiesz. Węzeł 2 nie sprawdził węzła A, ponieważ węzeł A został ukończony. Gdy węzeł 2 jest oznaczony jako „Uruchomiony”, zauważa, że ​​węzeł B jest węzłem, który jest obecnie uruchomiony. Możesz założyć, że jeśli węzeł jest uruchomiony, oznacza to, że poprzednie węzły nie muszą być sprawdzane ponownie.
MichaelHouse
Czy resetujesz Root Selector (0), aby „READY” po ustawieniu go na „RUNNING” po pierwszej iteracji?
Darmowy Lancer
Uważam, że tylko element nadrzędny działającego węzła jest ustawiony na działanie. Root musi być ustawiony na gotowość zamiast uruchamiania, ponieważ musimy ponownie przeanalizować węzeł (1).
MichaelHouse
3
To jedna z opcji. Możesz go aktualizować tak często lub rzadko, jak chcesz. Co 300 ms, jeśli chcesz, lub każda klatka. Lub możesz mieć stałą aktualizację, jak również uruchamianą aktualizację, aby poradzić sobie z dowolnymi zdarzeniami. Drzewa zachowania, podobnie jak większość takich struktur, nie są ściśle określone. Powinny być używane w najlepszy możliwy sposób dla twojej gry. Jeśli oceniając go, każda klatka jest zbyt marnotrawna, nie rób tego. Możesz także ograniczyć czas poświęcony na ocenę drzewa i wybrać kolejną klatkę, jeśli chcesz. Istnieje wiele opcji.
MichaelHouse