【问题标题】:How to clear object from previous frame in Flash with AS3?如何使用 AS3 从 Flash 中的前一帧中清除对象?
【发布时间】:2012-07-31 22:50:48
【问题描述】:

我在某个帧的舞台上有一个对象(MovieClip),在下一帧,即使该对象在视觉上被移除,它仍然存在(它有一个内部函数可以周期性地在舞台上生成一些东西,并且舞台正在生成对象)。我知道我可以在离开框架时简单地停止动作,但是对象会占用内存,甚至可能占用一些后台动作的 CPU 时间(这是一个 AIR 到 iOS 项目,所以我关心内存和性能)。我怎样才能完全摆脱这个物体?我希望当我导航到另一个框架时,如果它是设计器放置的对象(如果该对象不是由 ActionScript 生成的不是),那么所有内容都会被删除,但情况确实如此,但它只会在视觉上被删除。

谢谢, 可以。

【问题讨论】:

  • 您的内部函数可能会阻止它被垃圾收集(发布该函数可能有助于找到解决方案)。您如何在视觉上移除对象? (在时间轴上有一个没有它的新关键帧,还是通过代码?)
  • 好的,这是我的内部函数:protected function enterFrameHandler(e:Event){ timer++; if(timer == targetTime){ timer = 0;生成函数(x,y);其中 generateFunction 是一个函数对象,它是对阶段中定义的函数的引用。我正在通过关键帧删除对象。如果有意义的话,我的对象是在阶段命名的实例,但在该框架以外的任何地方都没有被引用。该项目通常非常复杂(到处都是函数对象等),因此很难直接说出任何事情(而且这里太大了,无法发布)

标签: actionscript-3 flash air


【解决方案1】:

只需清空您的对象引用,它就是侦听器。

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

【讨论】:

  • 是的,您可以删除每个DisplayObject。请注意,您必须定义 removeListeners().
  • 好的。不知何故,我记得设计生成的对象无法使用 actionscript 从舞台上移除。无论如何,谢谢。
猜你喜欢
  • 2013-01-03
  • 1970-01-01
  • 2012-03-10
  • 2023-04-08
  • 1970-01-01
  • 1970-01-01
  • 2011-02-22
  • 2011-08-17
  • 1970-01-01
相关资源
最近更新 更多