zoukankan      html  css  js  c++  java
  • BehaviorTree.CPP行为树BT的选择节点(四)

    Fallback

    该节点家族在其他框架中被称为“选择器Selector”或“优先级Priority”。

    他们的目的是尝试不同的策略,直到找到可行的策略。

    它们具有以下规则:

    • tick第一个孩子之前,节点状态为RUNNING
    • 如果子节点返回FAILURE,则后备会tick下一个节点。
    • 如果最后一个子节点也返回FAILURE,则所有子节点都将暂停,并且序列将返回FAILURE
    • 如果子节点返回SUCCESS,它将停止并返回SUCCESS。 所有的子节点都停止了。

    当孩子返回RUNNING时,Fallback的两个版本的反应方式不同:

    • FallbackStar将返回RUNNING,并且下次对其进行tick时,它将在之前停止的那个节点上tick
    • 普通的旧Fallback会返回RUNNING,并且每次执行后都会重置下一个要执行的子级的索引。

    Fallback

    在此示例中,我们尝试不同的策略来打开大门。 首先(和一次)检查门是否打开。
    image

    // index is initialized to 0 in the constructor
    status = RUNNING;
    
    while( _index < number_of_children )
    {
        child_status = child[index]->tick();
    
        if( child_status == RUNNING ) {
            // Suspend execution and return RUNNING.
            // At the next tick, _index will be the same.
            return RUNNING;
        }
        else if( child_status == FAILURE ) {
            // continue the while loop
            _index++;
        }
        else if( child_status == SUCCESS ) {
            // Suspend execution and return SUCCESS.
            HaltAllChildren();
            _index = 0;
            return SUCCESS;
        }
    }
    // all the children returned FAILURE. Return FAILURE too.
    index = 0;
    HaltAllChildren();
    return FAILURE;
    

    ReactiveFallback

    如果先前条件之一将其状态从FAILURE更改为SUCCESS,则当您想中断异步子项时,将使用此ControlNode:ReactiveFallback

    在以下示例中,如果角色充分休息,则该角色最多可睡8个小时或更短的时间。
    image

    伪代码

    // index is initialized to 0 in the constructor
    status = RUNNING;
    
    for (int index=0; index < number_of_children; index++)
    {
        child_status = child[index]->tick();
    
        if( child_status == RUNNING ) {
            return RUNNING;
        }
        else if( child_status == FAILURE ) {
            // continue the while loop
            index++;
        }
        else if( child_status == SUCCESS ) {
            // Suspend execution and return SUCCESS.
            // At the next tick, index will be the same.
            HaltAllChildren();
            return SUCCESS;
        }
    }
    // all the children returned FAILURE. Return FAILURE too.
    index = 0;
    HaltAllChildren();
    return FAILURE;
    

    原文

  • 相关阅读:
    linux常用命令
    linux简介
    vmware+CentOs 6.9的安装步骤
    Android layer type与WebView白屏-第一次加载webview很慢
    Android View框架的measure机制
    maven的facet错误解决方法
    oracle jdbc驱动发布nexus
    dubbox2.8.4编译发布到私服(nexus)
    一致性哈希 与 普通哈希对比
    1对多业务,数据库水平切分架构一次搞定 | 架构师之路
  • 原文地址:https://www.cnblogs.com/hokori/p/14158204.html
Copyright © 2011-2022 走看看