我试图制作一个直升机游戏,并且我的游戏中添加了一个标题屏幕,但每当我尝试删除该按钮时,按钮都没有删除 - 它给了我这个错误:
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);
}
答案 0 :(得分:1)
你可以这样做:
if (objTitleScreen.parent)
objTitleScreen.parent.removeChild(objTitleScreen);
但理想情况下,您应该知道对象的父级,以及这是否真的有必要。
答案 1 :(得分: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展示列表的this内容非常丰富的文章,您将了解如何解决问题。