2012-07-31 53 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