1

我试图了解我从 Flash CS4 导入 Flex Builder 3 的 SWC 中发生了什么。具体来说,我使用由 Designer 提供的 SWC 作为自定义预加载器(子类 DownloadProgressBar)的动画。

我想了解的问题是,一旦触发了 FlexEvent.INIT_COMPLETE,我通过运行以下命令删除 swc 进行清理:

removeChild(myPreloader);
myPreloader = null;

尽管即使在我删除了它之后(这是成功的,因为我通过比较 this.numChildren 在调用前后进行了检查),关键帧动画仍然继续运行(不可见)。设计师在动画的时间线中放置了一条轨迹(在 Flash 中),已检测到这一点。

谁能告诉我为什么,即使我从子类 DownloadProgressBar 中删除了动画,它仍然继续运行?

此外,在导入 SWC 以管理来自 Flash 方面的资源清理(很像在 obj-c 中释放内存)时,这是标准做法吗?我发现从 Flex 端移除子元素并不会停止动画,这很不直观。

对此的任何线索将不胜感激。

4

1 回答 1

0

基本上,您的 SWC 文件只不过是一个包含 SWF 的 ZIP。因此,您正在做的是从舞台上删除一个 MovieClip,但它不会停止或卸载它。你可能想试试

myPreloader.stop();

停止动画和

myPreloaderLoader.unload();

在您从舞台上移除项目以释放​​内存之后。

但请注意:Flash Player 垃圾收集并不总是正常工作。如果在 myPreloader 中运行任何类型的 ActionScript,它很可能会继续运行,并且在垃圾收集期间将被忽略。通常最好为所有 AS 类包含一个clear()ordestroy()方法并调用它Event.REMOVED_FROM_STAGE。这必须由您的设计师同事完成,但根据我的经验,这是最干净的程序。

于 2010-12-18T17:30:52.020 回答