2011-06-15 67 views
1

这是我在一个连续加载图像的图库中使用的代码。当您必须打开不同的影像专辑并且必须消除动画片段中以前加载的所有孩子时,我的问题才会出现。当我加载新相册时,我使用了您在此发布的代码:AS3 How to remove previous loaders,但问题在于,有时用户在所有图片出现之前都会离开相册页面,因此当他们点击新相册打开相册时,新图片会被放置在其他位置导致装载机已经启动。我试图关闭()加载程序,但它似乎不工作。如果你能帮我一把,我会感激不尽。先谢谢了。在这里,您可以看到工作现场www.barbarabritvin.com(看什么IM交谈abouy你必须点击专辑,之前所有图片加载离开,并开辟一个又一个。来自阿根廷加油!由于无法关闭()加载程序,因此无法删除库中的所有加载的子项!

getImage(dataList[0].file) 


function getImage(href:String):void { 


var loader:Loader = new Loader(); 
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, imageReady); 
loader.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, showProgress); 
loader.x=xCounter 
loader.load(new URLRequest(href)); 

} 


function imageReady(e:Event):void { 
var bitmap:Bitmap=e.target.content; 
if (bitmap!=null) { 
    bitmap.smoothing=true; 
} 

displayLarge2.thumb_loader.thumbHolderInside.addChildAt(e.target.loader,0) 
yaCargo=true 


trace("NUMCHILDREN"+displayLarge2.thumb_loader.thumbHolderInside.numChildren) 


collection.push(e.target.content); 
xCounter=xCounter+e.target.loader.width+3 
imagecounter++; 
if(imagecounter < dataList.length() && loadingPics==true) { 
getImage(dataList[imagecounter].file); 
} 

} 

function clearThumbs():void 
    { 
     while(displayLarge2.thumb_loader.thumbHolderInside.numChildren > 0) 
     { 
      //Remove the first child until there are none. 
      displayLarge2.thumb_loader.thumbHolderInside.removeChildAt(0); 
     } 
    } 


displayLarge2.close.addEventListener(MouseEvent.CLICK, closeAlbum) 




function closeAlbum(e:MouseEvent):void{ 
displayLarge2.thumb_loader.thumbHolderInside.enabled=false 
loadingPics=false 


      while(displayLarge2.thumb_loader.thumbHolderInside.numChildren>0) 
    { 
      displayLarge2.thumb_loader.thumbHolderInside.removeChildAt(0) 
    } 


     trace("NUMCHILDREN"+displayLarge2.thumb_loader.thumbHolderInside.numChildren) 

imagecounter=0 
xCounter=0 

displayLarge2.enabled=false 
displayLarge2.mouseChildren=false 






var scrollerTween=TweenManager.create(displayLarge2,"alpha",Regular.easeIn,1,0,0.5,true); 
scrollerTween.addEventListener(TweenEvent.MOTION_FINISH, doNextTween) 
function doNextTween(e:TweenEvent):void{ 


    sectionThumbs.enabled=true 
    sectionThumbs.mouseChildren=true 
    displayLarge2.visible=false 

    var   thumbsTween=TweenManager.create(sectionThumbs,"alpha",Regular.easeIn,0,1,0.5,true); 
    scrollerTween.removeEventListener(TweenEvent.MOTION_FINISH, doNextTween) 
} 



} 
+1

**请**看看这个链接:http://www.adobe.com/devnet/actionscript/articles/oop_as3.html – Marty 2011-06-15 02:51:55

回答

1

我会强烈建议LoaderMax通过使用GreenSock。

http://www.greensock.com/loadermax/

我使用它的一些非常重大的加载/卸载,并处理了很多清理工作。

+0

我会给它一看!非常感谢你! – nlalli87 2011-06-15 07:22:10

1

一种方式去了解它会分配一个容器到每个专辑。通过这种方式,当你想加载一个新的相册时,你只​​需摆脱先前的容器并将新的容器添加到显示列表。

如果你使用OOP方法(参见Marty Wallace的链接),一个可能的解决方案可能是创建一个Album类,它可以处理其内容的加载(可能通过LoaderMax)。选择一个新的相册,将从显示列表中删除前一个,并存储它以供以后调用。

LoaderMax是相当有用的,你应该检查出来。您可以创建加载顺序并根据用户的交互情况随意修改它。

+0

我尝试了第一个aproach,但遇到了一些问题,所以继续与我有什么;这是这个。但我可能不得不回去尝试LoaderMax方法后的方法!谢谢! – nlalli87 2011-06-15 07:24:01

0

如果使用OOP,您可以用三个核心要素构建应用程序:

  1. Main -> MovieClip
  2. Album -> MovieClip
  3. Photo -> Loader

Main将控制加载Album,这将排队并加载实例Photo。当Album关闭时,可以删除包含的Photo实例,并且可以忽略当前排队的Photo(s)。我有。