Actionscript 3 AS3图像加载器内存问题

Actionscript 3 AS3图像加载器内存问题,actionscript-3,Actionscript 3,我有一个简单的flash图像库。它的工作方式是,它使用一个名为“picContain”的movieClip,将图像加载到该movieClip中,对其进行alphas处理,等待几秒钟,然后进行alpha处理,并重复该过程 代码在图像源的数组中循环。它循环的次数与数组中的项相同。问题是,随着时间的推移(大约15分钟左右),加载图像的时间越来越长。我猜这是因为它没有卸载加载到包含的电影剪辑中的最后一张图片。下面是我加载图像的代码部分: function imageLoaded(e:Event) {

我有一个简单的flash图像库。它的工作方式是,它使用一个名为“picContain”的movieClip,将图像加载到该movieClip中,对其进行alphas处理,等待几秒钟,然后进行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是解决方案吗?如果是这样,我如何让它在不指定的情况下删除包含剪辑中的内容


感谢您的帮助。

简单,使用picContain显示对象容器的getChildAt()方法获取ImageLoader的参考。您必须将picContain显示对象容器中ImageLoader的索引指定为getChildAt()的唯一参数(对于以下情况,我假定其为0):

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


这些剪辑确实有一个实例名,你只是不知道而已。追踪它——你可能会得到“实例23”之类的东西

以上答案肯定对你有用,但如果你的逻辑不严密,可能会导致问题。如果没有其他引用(例如“name”或从扩展类派生的道具),您可能会删除错误的内容

另外,请确保正确标记垃圾收集—这种情况是内存泄漏。只要确保引用计数为0,并在将实例从显示列表中删除后将其设置为null。你应该做好准备


祝你好运

我不认为问题在于加载图像所花费的时间越来越长——更重要的是,您从未卸载其中的每个图像,我的猜测是,您将它们全部保留在alpha=0,而不是将visible=false

15分钟的图像都设置为alpha混合,相互叠加,这可能会毁掉你的电脑:D

装载时间较长可能是fps下降的结果

使用Taurayi的removeChildAt()建议。如果您有多个子项,请将其放入while循环:

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