【踩坑】cc.follow动作API的使用

起因:我想做一个导弹的实现,同时我不想用物理系统去实现,所以就想看看有没有动作系统能实现。然后就翻文档,找到了cc.follow 这个动作。
官方文档给的解释:
追踪目标节点的位置。
例子:
// example
// creates the action with a set boundary
var followAction = cc.follow(targetNode, cc.rect(0, 0, screenWidth * 2 - 100, screenHeight));
node.runAction(followAction);

// creates the action with no boundary set
var followAction = cc.follow(targetNode);
node.runAction(followAction);

我想这样应该就可以实现导弹的效果,结果不行。
cc.follow 这个动作的效果是 直接将自身节点的位置赋值为目标节点的位置, 并且之后一直保持自身节点位置与目标节点位置相同
类似:
update(dt){
this.node.position = target.position
}

所以 cc.follow 应该算是一个瞬时的动作。 很奇怪的一点是,在官方文档 cc.follow 被归为了 时间间隔动作。
后面我又试了一下, cc.follow 没有 duration 这个参数(也就是 多少时间完成动作) 也没有 easing 方法(缓动动作) 这些都不符合 时间间隔动作 的定义。

最后说一下 我怎么在不使用物理系统做的导弹追踪吧。
如果用物理系统 那就是让 导弹的运动角度插值旋转指向目标点,然后一直给导弹一个向前的速度就好了·。
不是物理系统,我是先用一个 cc.bezierTo 做一个贝塞尔曲线做导弹前半部分轨迹 和 cc.rotateBy 旋转一定角度(这里我没有让导弹一定要旋转到"对准"目标) 然后当 贝塞尔轨迹动作结束后 在 update 里面 让 this.node.position += (target.position - this,node.position) * dt 就好了 也就是一个向量的加减法 来完成导弹的后半部分轨迹。

因为没有翻译好,cc.follow 的作用并不在这个地方。

参考:https://github.com/cocos-creator/engine/issues/3747
这个功能是较老的功能,您可能是理解成了节点跟随节点这种类型的功能,但是实际上它主要实现的是子节点在父节点背景中类似摄像机跟随的功能。当子节点移动的时候会让父节点向相反方向移动以产生镜头跟随的观感,那些计算是为了实现这个功能而进行的~~

1赞

嗯。当时我还找了找有没有人用过这个功能。 最后只找到了把这个功能用在摄像机跟随上的例子。