我有一个简单的flash图库。它的工作方式是,它使用名为“picContain”的movieClip将图像加载到其中,将其加载,等待几秒钟,然后降低alpha,然后重复该过程。
代码循环遍历图像源的数组。它与数组中的项循环次数相同。问题是,随着时间的推移(约15分钟左右),加载图像需要更长时间。我猜这是因为它没有卸载加载到包含的影片剪辑中的最后一张图片。这是加载图像的代码部分:
function imageLoaded(e:Event) {
imageLoader.width = 1013;
imageLoader.height = 760;
Bitmap(imageLoader.content).smoothing = true;
picContain.addChild(imageLoader);
alphUp(picContain); // my alpha up function
}
事情是,即使我想使用picContain.removeChild()
,我也不能,因为removeChild
需要括号中的实例名称 - 而且这些剪辑没有em。 removeChild是解决方案吗?如果是这样,我怎样才能删除包含剪辑中的内容而不指定?
感谢您的帮助。
答案 0 :(得分:0)
简单,使用picContain显示对象容器的getChildAt()方法获取ImageLoader的引用。您必须在picContain显示对象容器中指定ImageLoader的索引作为getChildAt()的唯一参数(对于以下我假设它在0):
picContain.removeChild(picContain.getChildAt(0));
或者你可以简单地使用removeChildAt()方法:
picContain.removeChildAt(0);
答案 1 :(得分:0)
剪辑确实有一个实例名称,你只是不知道它们。追踪它 - 你可能会得到“实例23”或类似的东西。
上述答案肯定对你有用,但如果你的逻辑不紧张,可能会引起问题。如果没有其他引用(例如'name'或从扩展类派生的prop),您最终可能会删除错误的内容。
另外 - 确保正确标记垃圾收集 - 这种情况是内存泄漏乞求发生。只需确保您的引用计数为0,并在从显示列表中删除它后设置instance = null。你应该被设置。
祝你好运!答案 2 :(得分:0)
我不认为问题在于加载图像需要更长时间和更长时间 - 更重要的是你永远不会卸载其中的每个图像,而我的猜测是你将它们全部留在alpha = 0,而不是而不是设置visible = false。
15分钟的图像全部设置为alpha混合在一起可能会杀死你的计算机:D
更长的加载时间可能是fps下降的结果。
使用Taurayi的removeChildAt()建议。如果你有一个以上的孩子,请把它放在一个while循环中:
while( picContain.numChildren > 0 )
picContain.removeChildAt( 0 );