2012-07-31 37 views
0

我在某個幀的舞臺上有一個對象(MovieClip),並且在下一幀,即使該對象被直觀地移除,它仍然存在(它有一個內部函數,可以定期在舞臺上生成某些東西,並且舞臺對象正在生成)。我知道我可以在離開框架的時候簡單地停止動作,但是對象會消耗內存,甚至可能會耗費一些後臺動作的CPU時間(這是AIR to iOS項目,所以我關心內存和性能)。我怎樣才能完全擺脫對象?如果它是設計器放置的對象(如果對象是由動作腳本生成的而不是),那麼我希望在導航到另一個框架時將所有內容都刪除,但這種情況只能在視覺上刪除。如何使用AS3從Flash中的前一幀清除對象?

謝謝, 可以。

+0

您的內部函數可能會阻止垃圾收集(發佈該函數可能有助於找到解決方案)。你如何直觀地去除物體? (在沒有它的時間軸上有新的關鍵幀,或通過代碼?) – BadFeelingAboutThis 2012-07-31 23:06:39

+0

好的,這裏是我的內部函數:protected function enterFrameHandler(e:Event){ \t \t \t timer ++; \t \t \t如果(定時器== targetTime){ \t \t \t \t計時器= 0; \t \t \t \t generateFunction(x,y); \t \t \t} \t \t} 其中generateFunction是一個功能對象,它是參考在階段定義的函數。我通過關鍵幀去除對象。就算有意義,我的對象也是在舞臺上命名的,但是除了那個框架之外,其他地方都沒有引用它。該項目通常是非常複雜的(函數對象無處不在等),所以不容易直接告訴任何事情(並且在這裏發佈它太大了) – 2012-08-01 03:03:06

回答

4

只是你的對象引用,它是聽衆。

... 
myMovieClip.removeListeners();//class function 
myMovieClip.parent.removeChild(myMovieClip); 
myMovieclip = null; 
... 
+0

removeChild()對設計創建的對象起作用嗎? – 2012-08-01 02:59:27

+0

是的,你可以刪除每個'DisplayObject'。請注意,您必須定義**'removeListeners()'。 – Florent 2012-08-01 09:11:14

+0

確定它工作。不知何故,我記得設計生成的物體無法從動作中移除。不管怎麼說,還是要謝謝你。 – 2012-08-01 13:34:57