2011-04-03 121 views
0

因此,我从xml加载图片,并将它们添加到名为cv的movieclip中,该图片有一个名为cHolder的持有者。现在的问题是,当preloader显示正在加载时,cv(s)已经出现了。无论如何,只有在图像加载完成后才能显示所有简历。 谢谢。AS3加载完成后显示图像

for each (var projectName:XML in projectAttributes) 
    { 
     //trace(projectName); 
     var projectDP:XMLList = projectInput.project.(@name == projectName).displayP; 
     //trace(projectDP); 

     var cv:MovieClip = new cView(); 
     catNo += 1; 
     cv.name = "cv" + catNo; 
     cv.buttonMode = true; 
     if(catNo % 5 == 0) 
     { 
      catY += 137; 
      catX = -170; 
      cv.x = catX; 
      cv.y = catY; 
     } 
     else 
     { 
      cv.x = catX; 
      cv.y = catY; 
      catX += 112; 
     } 

     var imageLoader = new Loader(); 
     imageLoader.load(new URLRequest(projectDP));   
     TweenLite.to(cv.cHolder, 1, {colorTransform:{tint:0x000000, tintAmount:0.8}}); 
     cv.cHolder.addChild(imageLoader); 
     cv.ct.text = projectName; 
     projName.push(projectName); 
     this.addChild(cv); 

     imageLoader.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, imageProg); 
     function imageProg(e:ProgressEvent):void 
     { 
      loader.visible = true; 
      var imageLoaded:Number = e.bytesLoaded/e.bytesTotal*100; 
      loader.scaleX = imageLoaded/100; 
     } 

     imageLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, imageLoad); 
     function imageLoad(e:Event):void 
     { 
      loader.visible = false; 
     }  

回答

1

首先,不要把一个函数另一个函数里面,这不会帮助任何东西,是个坏习惯:)

声明两个私有变量:

var nImages:uint; 
var loadedImages:uint; 

之前循环:

nImages = projectAttributes.length(); 
loadedImages = 0; 
cv.visible = false; 

,并在Event.COMPLETE听众:

function imageLoad(e:Event):void 
{ 
    loader.visible = false; 
    loadedImages++; 
    if (loadedImages == nImages) 
    { 
     cv.visible = true; 
    } 
} 
+0

rofl该死的,你发布了5秒钟之前,我做了。 – 2011-04-03 15:24:52

+1

您还应该提供一个错误处理程序(IOError,HTTPStatus 4XX,异常)。如果图像无法加载,'cv'将永远不可见... – OXMO456 2011-04-03 15:45:10

0

var count:int = 0;

var totalClips:int = 0;

cv.visible = false;

for each (var projectName:XML in projectAttributes) 

{ 
    ++totalClips; 
    //trace(projectName); 
    var projectDP:XMLList = projectInput.project.(@name == projectName).displayP; 
    //trace(projectDP); 

    var cv:MovieClip = new cView(); 
    catNo += 1; 
    cv.name = "cv" + catNo; 
    cv.buttonMode = true; 
    if(catNo % 5 == 0) 
    { 
     catY += 137; 
     catX = -170; 
     cv.x = catX; 
     cv.y = catY; 
    } 
    else 
    { 
     cv.x = catX; 
     cv.y = catY; 
     catX += 112; 
    } 

    var imageLoader = new Loader(); 
    imageLoader.load(new URLRequest(projectDP));   
    TweenLite.to(cv.cHolder, 1, {colorTransform:{tint:0x000000, tintAmount:0.8}}); 
    cv.cHolder.addChild(imageLoader); 
    cv.ct.text = projectName; 
    projName.push(projectName); 
    this.addChild(cv); 

    imageLoader.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, imageProg); 
    function imageProg(e:ProgressEvent):void 
    { 
     loader.visible = true; 
     var imageLoaded:Number = e.bytesLoaded/e.bytesTotal*100; 
     loader.scaleX = imageLoaded/100; 
    } 

    imageLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, imageLoad); 
    function imageLoad(e:Event):void 
    { 
     ++count; 
     if(count == totalClips){ 
      cv.visible = true; 
     } 
     loader.visible = false; 
    } 

}

所以,你可能要调整的东西一点点,万一我数错点等你实现,但正如你看到的解决方法很简单,你算从XML加载处理剪辑的总数,然后当图像加载并调用OnComplete回调函数时,您将增加另一个计数,直到您看到已加载所有处理后的图像并将该容器设置为可见。