Árvores de comportamento: ações que demoram mais de um tick

19

Pelo que entendi nas Árvores de Comportamento, cada Comportamento deve ser uma Ação curta, orientada para objetivos, que pode ser realizada em algumas iterações.

Então, por exemplo, abaixo está uma imagem de uma Árvore de comportamento:

insira a descrição da imagem aqui

Agora, vamos supor que o comportamento Dirigir ao inimigo requer mais do que algumas iterações na árvore. Assim, a cada passo, o Drive To Enemy é chamado porque agora está no estado de execução .

O problema é que eu quero chamar Evade Enemy se um inimigo estiver próximo. E considerando que o Drive To Enemy é sempre chamado, eu nunca tenho a chance de chamar Evade Enemy ( provavelmente deveria ser chamado de Evite o Inimigo ).

  • Devo percorrer a árvore CADA passe, independentemente da ação em execução no momento?
  • Estou fazendo isso da maneira certa?
  • Qual é a maneira correta de lidar com esse comportamento?

Originalmente solicitado no Stackoverflow. O pensamento aqui seria um local mais apropriado para fazer esta pergunta.

Trabalhador autonomo
fonte
1
A resposta fornecida aqui ajuda? Você está aqui: Página Inicial
Notícias /
Essa também é a minha pergunta. Eu ia postar esta pergunta como um comentário, mas achei que deveria ser uma pergunta separada.
Lancer Free

Respostas:

16

Veja a imagem que forneci na minha resposta anterior :

insira a descrição da imagem aqui

Se você imaginar que o nó 1 é 'Evade Enemy' e o nó 2 é 'Chase Enemy', você verá que, embora na segunda iteração (quando tudo estiver verde, exceto '2' e 'B', seja na segunda iteração 'Evade Enemy' ainda é verificado primeiro. Somente quando 'Evade Enemy' falha, porque não há inimigos por perto, 'Chase Enemy' é ativado novamente. Quando 'Chase Enemy' é visitado novamente, ele percebe que está no estado 'running' e pula diretamente para 'B'.

Isso significa que toda vez que a árvore é verificada, ela sempre se desloca da esquerda para a direita. Mesmo quando um nó é marcado como em execução, os nós de maior prioridade ainda são verificados primeiro.

Não tenho certeza se você pretende processar seus nós da direita para a esquerda, mas é assim que parece que eles estão organizados (ou seja, sob iludir o inimigo, localize o inimigo à direita da unidade na direção oposta). Se precisar de mais explicações, pergunte no bate-papo ou em uma de suas perguntas existentes sobre o assunto.

MichaelHouse
fonte
2
Obrigado por outra ótima explicação. Eu estava tendo dificuldade para entender a natureza recursiva das Árvores Comportamentais. Eu ia perguntar a você no comentário da última pergunta, mas não queria transformar os comentários em um longo controle de qualidade. Uma última pergunta, porém, tudo isso faz sentido agora. Existe uma diferença entre seletores e seqüências no tratamento de estados em execução? Parece que o Seletor (Nó 0) verificou o Nó 1 primeiro, enquanto a sequência "Nó 2" não verificou o Nó A, na segunda iteração.
Lancer Free
4
Boa pergunta, acho que você está entendendo. O nó 2 não verificou o nó A porque o nó A foi concluído. Quando o nó 2 é marcado como 'Em execução', ele observa que o nó B é o nó que está sendo executado no momento. Você pode supor que, se um nó estiver em execução, isso significa que os nós anteriores não precisam ser verificados novamente.
Michaelhouse
Você está redefinindo o seletor de raiz (0) para "PRONTO" após ter sido definido como "EXECUTANDO" após a primeira iteração?
Livre Lancer
Acredito que apenas o pai do nó em execução está definido para execução. A raiz precisa ser configurada como pronta em vez de ser executada, porque precisamos analisar o nó (1) novamente.
MichaelHouse
3
Essa é uma opção. Na verdade, você pode atualizá-lo com a frequência que deseja ou com a menor frequência. A cada 300 ms, se você quiser, ou a cada quadro. Ou você pode ter uma atualização fixa e uma atualização acionada para lidar com qualquer evento. As árvores de comportamento, como na maioria das estruturas como essa, não são estritamente definidas. Eles devem ser usados ​​da melhor maneira possível para o seu jogo. Se a avaliação de cada quadro for muito dispendiosa, não faça isso. Você também pode limitar a quantidade de tempo gasto na avaliação de uma árvore e seguir o próximo quadro, se quiser. Há muitas opções.
MichaelHouse