1

我正在尝试制作一个直升机游戏,并且我的游戏中添加了一个标题屏幕,但是每当我尝试 removeChild 时,该按钮都不会被移除 - 它给了我这个错误:

ArgumentError: Error #2025: The supplied DisplayObject must be a child of the caller.
at flash.display::DisplayObjectContainer/removeChild()
at CopterScratch/gameStart()
at flash.events::EventDispatcher/dispatchEventFunction()
at flash.events::EventDispatcher/dispatchEvent()
at fl.controls::LabelButton/keyUpHandler()

这是我的代码:

public function gameStart(e:MouseEvent):void {
        removeChild(objTitleScreen);
        if (btnStart.enabled){
            removeChild(btnStart);
        }
        removeChild(rbNormal);
        removeChild(rbDifficult);
        tmrMoveMap.start();
        tmrGravity.start();
        addChild(objHelicopter);
    }
4

2 回答 2

1

你可以做:

if (objTitleScreen.parent)
    objTitleScreen.parent.removeChild(objTitleScreen);

不过,理想情况下,您应该知道对象的父对象,以及这是否真的有必要。

于 2013-06-05T03:13:10.337 回答
0

以下一项(或多项);objTitleScreen、btnStart、rbNormal 或 rbDifficult... 不是定义函数“gameStart”的对象的子对象。本机函数“removeChild”期待一个孩子作为参数,它抱怨是因为它没有得到一个。在调用“gameStart”函数的类中运行下面的代码,以查看有哪些孩子(假设每个孩子都已明确命名,如果不是这种情况 - 从代码中省略“.name”)。

for (var i:uint = 0; i < this.numChildren; i++) {
    trace('child at: ' + i + ' = ' + this.getChildAt(i).name); 
}

阅读有关 AS3 显示列表的这篇内容丰富的文章,您将了解如何解决您的问题。

于 2013-06-05T00:24:14.573 回答