我正在为学校开发一个简单的Flash游戏。在一个等级中,多个敌人产生并且玩家应该射击它们。我使用removeChild()来摆脱射击的敌人,但是当我点击(击中)一个敌人时,我的舞台上的所有东西都会被移除;它完全空白。AS3 - removeChild()删除舞台上的所有内容
功能来填充我的舞台与敌人如下:
private function Game2():void{
for (var i:uint=0; i<50; i++) {
var man:MovieClip = new man_mc();
man.x=Math.random()*750;
man.y=Math.floor(Math.random()*(70))+350;
addChild(man);
man.addEventListener(MouseEvent.CLICK, getroffen);
}
功能“getroffen”检查,如果敌人腹背受敌:
public function getroffen(evt:MouseEvent):void{
trace("hit");
this.parent.removeChild(this);
}
的困惑类在这里,为什么它删除在舞台上的一切,而不是去除我点击的敌人。任何帮助?非常感谢。
谢谢。这工作正常。你能解释一下Tim S.提供的代码有什么不同吗?我比他们更了解他的代码,但他们似乎都能做到这一点。 – cabaret 2011-03-25 15:05:34
它们在功能上都是等效的。唯一的区别是他使用'currentTarget'参数(可能更好)而不是'target'参数。区别在于事件模型的工作原理以及注册事件侦听器的人员。我所做的只是将目标投射到一个“MovieClip”(你可以添加一个检查来查看它是否为空,然后如果你愿意的话可以返回),然后调用它的“父”来删除它。当你将一个DisplayObject添加到另一个DisplayObject时,它就成为该对象的子对象,并且它的父参数集被设置。所以'obj.parent.removeChild(obj)'是一个简单的方法来移除它 – divillysausages 2011-03-25 16:42:31
至于'target'和'currentTarget'的区别,flash中的'Event'模型有3个阶段:捕获阶段,事件阶段,和冒泡阶段。当显示列表中的一个对象发送一个事件时,它将发送到'Stage-> parent-> parent-> parent-> child',其中'child'是调度事件的对象,'parent'是每个父'DisplayObject',所有到“舞台”的方式。直到最后一个“父母”我们处于捕获阶段。当我们到达“孩子”时,我们处于事件阶段。之后,活动再次回到'舞台'。这是冒泡阶段 – divillysausages 2011-03-25 16:45:48