关于动作系统不能正常回收的问题

如题:
动作结束后用callFunc再次run这个动作,会导致旧的动作不能正常停止?

start () {
        this.move = cc.sequence(
            cc.moveBy(0.5, 0, -10),
            cc.callFunc(this.aftermove, this)
        );

        this.node.runAction(this.move);
    },

    aftermove () {
        if(没有地板)
            this.node.runAction(this.move);
    },

我的本意是做一个hero按格子下落的效果,一次往下掉一个格,然后判断是否有地板,没有就再往下掉。
但是我发现它会越掉越快???

我怀疑是因为再callFunc的时候动作本身并没有停止,而下一次的动作有接着开始了,导致每帧位移的叠加?

另外,node再runAction的时候保存的是动作对象的引用还是它的克隆?

我感觉是引用,因为假如在一个动作a在运行的时候再次试图runAction(a),引擎会报错:动作已经在运行啦!

所以是不是因为有上述callFunc中再次启动动作自身的这个操作的存在,
导致引擎不能正确回收已经执行完的动作,又不会报“动作已经在运行”的错,
引发了同一动作叠加的奇怪bug?

另外,当真的碰到地板的时候,它是能正确停下来的。只不过最后落得很快而已。

以上。请教。

1赞

你每次运动用的都是一个move对象,下一次运动的时候创建一个新的move对象应该就可以了

start () {
        this.node.runAction(this.getMoveAction());
    },

    aftermove () {
        if(没有地板) {
            this.node.runAction(this.getMoveAction());
        }
            
    },

   getMoveAction () {
       return cc.sequence(
            cc.moveBy(0.5, 0, -10),
            cc.callFunc(this.aftermove, this)
        );
   }