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ń:
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.
Odpowiedzi:
Zobacz obraz, który podałem w mojej poprzedniej odpowiedzi :
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.
źródło