我正在爲學校開發一個簡單的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