2011-04-03 137 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回調函數時,您將增加另一個計數,直到您看到已加載所有處理後的圖像並將該容器設置爲可見。

相關問題