2011-03-11 93 views
0

我有一个简单的Flash图像库。它的工作方式是使用一个称为“picContain”的movieClip,它将图像加载到它的alpha中,等待几秒钟,然后alpha,然后重复这个过程。AS3图像加载器内存问题

代码循环访问图像源的数组。它循环的次数与数组中的项相同。问题是,随着时间的推移(大约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在parentheses-需要一个实例名称和这些片段没有EM。是removeChild的解决方案?如果是这样,我怎么能得到它删除任何在包含剪辑没有指定?

感谢您的帮助。

回答

0

很简单,通过使用picContain显示对象容器的getChildAt()方法获取ImageLoader的引用。你必须指定你的picContain显示对象容器作为getChildAt()的唯一参数的ImageLoader的索引(以下我认为它在0):

picContain.removeChild(picContain.getChildAt(0)); 

,或者你可以简单地使用removeChildAt()方法:

picContain.removeChildAt(0); 
0

剪辑确实有一个实例名称,你只是不知道它们。跟踪它 - 你可能会得到“实例23”或类似的东西。

上面的答案肯定适合你,但如果你逻辑不严密,可能会导致问题。如果没有其他的参考资料(例如“名称”或从扩展类派生的道具),您可能会删除错误的内容。

另外 - 一定要妥善标记垃圾收集 - 这种情况是一个内存泄漏乞求发生。只要确保引用计数为0,并在将它从显示列表中移除后将instance = null。你应该设置。

祝你好运!

0

我不认为问题是它需要更长和更长的时间来加载图像 - 它更多的是,你永远不会卸载每个图像在那里,我的猜测是你把它们全部保留在alpha = 0,而不是设置visible = false。

15分钟图像的所有设置alpha混合对对方很可能杀死你的计算机上:d

更长的加载时间可能是FPS落下的结果。

使用Taurayi的removeChildAt()建议。如果你有一个以上的孩子,把它放在一个while循环中:

while(picContain.numChildren > 0) 
    picContain.removeChildAt(0);