cocos creator中使用行为树(BehaviorTree) 二

cocos creator中使用行为树(BehaviorTree) 二

继续我们的行为树AI,  上一节我们已经实现了一个简单的监视守卫, 接下来我们赋予它一些高级一点的功能

实现一个监视到敌人靠近, 自动攻击, 玩家脱离监视范围, 攻击停止

开始敲.....

开始思考, 那个监视范围很好做, 就是判断位置, 返回一个状态, 但是攻击是一个持续的过程, 无法再一帧内完成, 而且在攻击没有结束的时候, 不能开始一次新的攻击, 那怎么做呢?

打开b3core.0.1.0module.js 其中有一些内置的结点, 我们找到wait结点, 其实wait结点和攻击结点有这相似的功能, 即要持续一段时间

 

可以看到, 在open时, 定义一个startTime, 每一次执行tick方法就会把当前时间减去开始时间, 判断其结果是否大于endTime

如果大于, 返回SUCCESS, 否则返回RUNNING, 通过RUNNING我们知道这个表示该结点还没有结束, 但是是怎么实现的呢?

在打开BaseNode, vsCode搜索var BaseNode = b3.Class();

我们可以看到, 如果这个结点返回的状态不是RUNNING, 就关闭调用close方法, 不然就退出调用exit方法

根据这两点, 我们就可以实现一个攻击功能.

打开cocos creator

添加了一个arms结点, 就是这个蓝色的方块, 所以我预计实现的攻击就是

  1. 显示武器(蓝色方块)
  2. 将武器从上到下移动
  3. 隐藏武器

打开Attack脚本


const {ccclass, property} = cc._decorator;

@ccclass
export default class NewClass extends cc.Component {

    speed = 1; // 移动的速度

    // onLoad () {}

    start () {
        
    }

    enter (tick,b3,treeNode){
        console.log("enter");
    }

    open (tick,b3,treeNode){
        console.log("open");
        this.node.getChildByName("arms").active = true;
    }

    tick (tick,b3,treeNode){
        console.log("tick");
        if(this.node.getChildByName("arms").y <= -40) {
            this.node.getChildByName("arms").y = 40;
            return b3.SUCCESS;
        }else {
            this.node.getChildByName("arms").y -= this.speed;
        }
        return b3.RUNNING;
    }

    close (tick,b3,treeNode){
        console.log("close");
        this.node.getChildByName("arms").active = false;
    }

    exit (tick,b3,treeNode){
        console.log("exit");
    }

    // update (dt) {}
}

在open方法中加入武器显示, close中关闭武器显示, tick中修改武器位置, speed表示武器执行速度

ok, 看看执行效果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值