1.10引擎BUG removeAllActions删除不完全

/**
     * !#en Removes all actions from all the targets.
     * !#zh 移除所有对象的所有动作。
     * @method removeAllActions
     */
    removeAllActions:function () {
        var locTargets = this._arrayTargets;//划重点
        for (var i = 0; i < locTargets.length; i++) {
            var element = locTargets[i];
            if (element)
                this.removeAllActionsFromTarget(element.target, true);
        }
    },
/**
     * !#en
     * Removes all actions from a certain target. <br/>
     * All the actions that belongs to the target will be removed.
     * !#zh
     * 移除指定对象上的所有动作。<br/>
     * 属于该目标的所有的动作将被删除。
     * @method removeAllActionsFromTarget
     * @param {Node} target
     * @param {Boolean} forceDelete
     */
    removeAllActionsFromTarget:function (target, forceDelete) {
        // explicit null handling
        if (target == null)
            return;
        var element = this._hashTargets[target.__instanceId];
        if (element) {
            element.actions.length = 0;
            this._deleteHashElement(element);
        }
    },
_deleteHashElement:function (element) {
        var ret = false;
        if (element && !element.lock) {
            if (this._hashTargets[element.target.__instanceId]) {
                delete this._hashTargets[element.target.__instanceId];
                var targets = this._arrayTargets;//划重点
                for (var i = 0, l = targets.length; i < l; i++) {
                    if (targets[i] === element) {
                        targets.splice(i, 1);//划重点
                        break;
                    }
                }
                this._putElement(element);
                ret = true;
            }
        }
        return ret;
    },

当在释放动画的同时 在_deleteHashElement:function 这个函数里面用的是splice导致this._arrayTargets整个数组长度变短 在 removeAllActions 这个函数里面删除不完全 很痛苦

@jare jare大大麻烦看一下

@jjyinkailejj 麻烦看一下大佬 目前只看到你在论坛活跃

length在外面也是一样的 兄弟你是真的分不清深拷贝和浅拷贝 还是逗我玩

看错了。。

要 – 实在不行 执行多次stopAllactions

stopAllactions无法对cc.repeatForever的动作生效 同时 我是需要释放动作 不是暂停动作 这是官方的逻辑BUG 迟早要改 除非废弃这个方法

说错了 执行多次remove函数 至于rpeat的情况… 目前没想到什么”黑”点子

我重写了引擎代码 但是这样不是个事 不能每次升级引擎都跑过去改引擎吧

恭喜加入”补丁工”家族

cc.Node.prototype.removeAllActions = function() {//重写这个方法 }

如果你有常驻节点,直接在常驻节点重写呗

cc.director._actionManager.prototype.removeAllActions = function() {
var locTargets = this._arrayTargets;//划重点
for (var i = locTargets.length-1; i >= 0 ; i–) {
var element = locTargets[i];
if (element)
this.removeAllActionsFromTarget(element.target, true);
}
},

谢谢反馈,这样删除是会有问题的,将会修复