0

每当我在 Adob​​e Flash CS4 中编译我的项目时,都会遇到以下错误消息:

ArgumentError: Error #2025: The supplied DisplayObject must be a child of the caller.
    at flash.display::DisplayObjectContainer/removeChild()
    at stageRotation/spawnParticle()
    at flash.utils::Timer/_timerDispatch()
    at flash.utils::Timer/tick()

产生错误的代码如下所示:

for (var i:int = 0; i < particleArrayForward.length; i++ ) {
    if (particleArrayForward[i] != null) {
        trace("particleArrayForward[" + i + "]:" + particleArrayForward[i]);
        this.removeChild(particleArrayForward[i]);
    }
}

任何输入表示赞赏。谢谢。:)

4

2 回答 2

2

removeChild当传递的参数不是调用该方法的父级的子级时,将引发此错误。粒子是否作为子项添加到对象内的另一个子容器中this

确保它确实是调用者的孩子:

for (var i:int = 0; i < particleArrayForward.length; i++ ) {
    if (particleArrayForward[i] != null && particleArrayForward[i].parent == this) {
        trace("particleArrayForward[" + i + "]:" + particleArrayForward[i]);
        this.removeChild(particleArrayForward[i]);
    }
}

如果粒子不是this对象的直接子级,您可以使用以下方法删除它们:

for (var i:int = 0; i < particleArrayForward.length; i++ ) {
    if (particleArrayForward[i] != null && particleArrayForward[i].parent != null) {
        trace("particle at " + i + " " + particleArrayForward[i]);
        trace("parent is " + particleArrayForward[i].parent);
        particleArrayForward[i].parent.removeChild(particleArrayForward[i]);
    }
}
于 2010-07-27T07:00:17.723 回答
1

您正在通过遍历数组中的所有粒子来从显示对象中删除一个子对象。但是,我看不到您在哪里删除了对数组本身中子项的引用。因此,如果您再次遍历particleArrayFoward,您将尝试删除一个已被删除的显示对象,我将假设它正在发生?

for (var i:int = 0; i < particleArrayForward.length; i++ ) {
    if (particleArrayForward[i] != null) {
        trace("particleArrayForward[" + i + "]:" + particleArrayForward[i]);
        this.removeChild(particleArrayForward[i]);
        particleArrayForward[i]=null;//this will fix it but now the length of array will never shrink

    }
}

更好:

for (var i:int = 0; i < particleArrayForward.length; i++ ) {
    if (particleArrayForward[i] != null) {
        trace("particleArrayForward[" + i + "]:" + particleArrayForward[i]);
        this.removeChild(particleArrayForward[i]);
    }
}
particleArrayForward = new Array();
//or particleArrayForward.length = 0;

否则,如果您不再循环遍历该数组,那么您将在某个地方添加一个子数组,该数组不是您要从中删除的显示对象的子数组。

于 2010-07-27T05:33:07.453 回答