Actionscript 3 ActionScript 3.0参数错误:2025(删除子问题)

Actionscript 3 ActionScript 3.0参数错误:2025(删除子问题),actionscript-3,removechild,Actionscript 3,Removechild,每当我在Adobe 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/_tim

每当我在Adobe 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]);
    }
}
for(变量i:int=0;i

欢迎您的任何意见。谢谢。:)

通过循环阵列中的所有粒子,可以从显示对象中删除子对象。但是,我看不到接下来在何处删除对数组本身中的子级的引用。所以,如果您再次通过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(变量i:int=0;i
更好的是:

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;
for(变量i:int=0;i

否则,如果不再次循环通过该阵列,则在某个位置将一个子对象添加到该阵列中,该子对象不是要从中删除的显示对象的子对象。

通过循环通过阵列中的所有粒子,将子对象从显示对象中删除。但是,我看不到接下来在何处删除对数组本身中的子级的引用。所以,如果您再次通过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(变量i:int=0;i
更好的是:

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;
for(变量i:int=0;i

否则,如果您没有再次循环该数组,则在某个地方您正在向该数组添加一个子元素,该子元素不是您试图从中删除的显示对象的子元素。

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

确保它确实是调用方的子对象:

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]);
    }
}

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

确保它确实是调用方的子对象:

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]);
    }
}