Actionscript 3 为什么AS3 removeChild()上有错误?

Actionscript 3 为什么AS3 removeChild()上有错误?,actionscript-3,flash,removechild,Actionscript 3,Flash,Removechild,我正在尝试为一个学校项目制作一个真正简单的游戏,我是ActionScript3的新手。我刚刚学会了如何通过代码将对象作为子对象调用到场景中,但我在移除它们时遇到了问题。删除实际上是有效的,但会产生如下错误 "ArgumentError: Error #2025: at flash.display::DisplayObjectContainer/removeChild() at breathe_bw_fla::MainTimeline/bulletSpeeder()" 我创建了两个bulle

我正在尝试为一个学校项目制作一个真正简单的游戏,我是ActionScript3的新手。我刚刚学会了如何通过代码将对象作为子对象调用到场景中,但我在移除它们时遇到了问题。删除实际上是有效的,但会产生如下错误

"ArgumentError: Error #2025:

at flash.display::DisplayObjectContainer/removeChild()

at breathe_bw_fla::MainTimeline/bulletSpeeder()"
我创建了两个bullet对象,一个面向左侧,另一个面向右侧。他们出现在枪在现场的地方。它们向左或向右移动,我想在它们离开场景后移除它们,当角色第二次拍摄时,它们将再次被调用

function shoot(event:KeyboardEvent) {
if(event.keyCode == 32 && shootCooldown > 48 && rightOrLeftDown == true && ammo > 0) {
    ammo -= 1;
    shootCooldown = 0;
    if(rightDown == true){
        addChild(bulletGoingRight);
        bulletGoingRight.x = character.x+character.width/2;
        bulletGoingRight.y = character.y;
        stage.addEventListener(Event.ENTER_FRAME, bulletSpeeder);
    }
    if(leftDown == true){
        addChild(bulletGoingLeft);
        bulletGoingLeft.x = character.x-character.width/2;
        bulletGoingLeft.y = character.y;
        stage.addEventListener(Event.ENTER_FRAME, bulletSpeeder);
        }
    }
}

function bulletSpeeder(Event){
if(bulletGoingLeft.x > -10){
    bulletGoingLeft.x -= 10;
}
if(bulletGoingLeft.x <= -10){
    removeChild(bulletGoingLeft);
}
if(bulletGoingRight.x < 760){
    bulletGoingRight.x += 10;
}
if(bulletGoingRight.x >= 760){
    removeChild(bulletGoingRight);
}
功能射击(事件:键盘事件){
如果(event.keyCode==32&&shootCooldown>48&&right或leftdown==true&&ammo>0){
弹药-=1;
冷却时间=0;
如果(rightDown==真){
addChild(bulletGoingRight);
bulletGoingRight.x=字符.x+字符.width/2;
bulletGoingRight.y=字符.y;
stage.addEventListener(Event.ENTER_FRAME,bulletSpeeder);
}
if(leftDown==true){
addChild(bulletGoingLeft);
bulletGoingLeft.x=character.x-character.width/2;
bulletGoingLeft.y=字符.y;
stage.addEventListener(Event.ENTER_FRAME,bulletSpeeder);
}
}
}
功能简报器(事件){
如果(bulletGoingLeft.x>-10){
bulletGoingLeft.x-=10;
}
如果(bulletGoingLeft.x=760){
removeChild(bulletGoingRight);
}

}

为寻找答案的人提供更多信息。错误#2025是

基本上,您要删除的对象要么没有父对象,要么是另一个对象的子对象

让对象自移除的简单方法是:

if( this.parent != null )
    this.parent.removeChild( this );


如果您没有使用类

现在我将removeChild命令放入shot函数中,它们不会在每一帧都被调用,但最终不会工作。子弹只是停在bulletSpeeder函数给出的x坐标处。嗯,仍然不是我想要的,因为当子弹击中敌人时,我也需要移除子弹。我解决了这个问题。为其他可能有同样问题的人写作。使用此选项。包含(bulletGoingRight)它检查bulletGoingRight对象是否在场景中。如果使用&&将其置于If条件中,则仅当对象在场景中时才会移除该对象。发生此错误的原因是您试图删除的对象不再存在于每个帧中。
if( this.parent != null )
    this.parent.removeChild( this );
if( obj.parent != null )
    obj.parent.removeChild( obj );