2013-04-06 63 views
0

我想要一個對象擊中另一個對象時發生爆炸。我這樣做,這樣,當hitTestObject是真的,我跑這個功能刪除時間軸中的動畫片段 - 真的走了嗎?

function createExplosion():void { 
var explosion:Explosion = new Explosion(enemy.x, enemy.y); 
this.parent.addChild(explosion); 
} 

防爆類只由輸入設置爲它的X和Y值。然後在爆炸movieclip中,我有幾幀動畫。它結束關鍵幀中(即,作爲該幀中的動作)用下面的代碼:

stop(); 
this.parent.removeChild(this); 

我的問題是。它現在真的走了嗎?我不得不添加停止()不會得到錯誤1009.這讓我懷疑一些事件計時器仍在運行?

回答

0

從顯示列表中刪除顯示對象不會停止動畫或將其從內存中移除。它只是從顯示列表中刪除它。是的,您需要停止動畫並刪除可能對該對象有效的任何事件偵聽器。

顯示對象從未真正走過,直到它被垃圾收集爲止。但是,直到沒有引用該對象時纔會發生。所以,如果你有一個變量叫爆炸,引用您的顯示對象,則需要從顯示列表中刪除後,將其設置爲空:

explosion.stop(); // stop the animation 
removeChild(explosion); // remove from display list 
explosion = null; // remove variable reference 
// explosion now qualifies for garbage collection. 

請記住,這不會立即從內存中刪除對象,它只是使垃圾收集器的公平遊戲。你可以谷歌「AS3垃圾收集」,以獲得有關該過程的更多信息。

+0

好的。該對象沒有任何事件偵聽器作爲類。 (我使用主事件偵聽器來移動每個幀的所有內容。)但是,是否有事件偵聽器,因爲mc中有幾個幀? (即,某個我沒有創建的隱式事件偵聽器)。如果是這樣,我該如何刪除它? – user2237931 2013-04-06 08:27:48

+0

正如我在答案中指出的那樣,您停止了動畫。 MovieClip類具有處理該方面的播放/停止方法。 – prototypical 2013-04-06 14:48:33