2012-04-02 25 views
0

我已經做了一個幻燈片的簡單代碼,從一個子文件夾動態加載圖像,這取決於文本文件中的聆聽。FLASH AS3 - 從TXT文件動態加載的幻燈片

代碼:

import flash.display.MovieClip; 
import flash.events.Event; 
import flash.display.Loader; 
import flash.net.URLLoader; 
import flash.net.URLRequest; 
import flash.display.Bitmap; 
import flash.display.BitmapData; 

public class slideshow extends MovieClip { 

    public var listLoader:URLLoader; 
    public var newImgList:Array; 
    public var imgX:int = 0; 
    public var container:MovieClip; 

    public function slideshow() { 
     container = new MovieClip(); 
     stage.addChild(container); 

     listLoader = new URLLoader(new URLRequest("./slideshow.txt")); 
     listLoader.addEventListener(Event.COMPLETE, initImages); 
    } 

    public function initImages(event:Event):void { 
     var imgList:Array = listLoader.data.replace(/^\s+/,"").replace(/\s+$/,"").split(/\s+/); 
     newImgList = new Array(); 
     for(var line:int = 0; line < imgList.length; line++) { 
      if(imgList[line].indexOf(".png") != -1 || imgList[line].indexOf(".jpg") != -1) { 
       newImgList.push(imgList[line]); 
      } 
     } 
     loadImage(); 
    } 

    public function loadImage():void { 
     for(var loaderNum = 0; loaderNum < newImgList.length; loaderNum++) { 
      var imgLoader = new Loader(); 
      imgLoader.load(new URLRequest("./slideshow/" + newImgList[loaderNum])); 
      imgLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, imgInit); 
     } 
    } 

    public function imgInit(event:Event):void { 
     var imgBmp:BitmapData = event.target.content.bitmapData; 
     var img:Bitmap = new Bitmap(imgBmp); 
     img.height = 150; 
     img.scaleX = img.scaleY; 
     img.y = 0; 
     img.x = imgX; 
     imgX = (imgX + img.width + 10); 
     container.addChild(img); 
    } 
} 

以及實際上它工作正常,我除了將圖像顯示在一個幾乎是隨機的順序。

我想代碼是加載一些圖像太慢,所以他們中的一些被添加到movieclip,雖然他們加載後應該去下一個。

所以我的意思:

1.png加載

1.png添加

2.png加載

3.png加載

3.png加

2.png添加

所以我的問題:

是否有任何其他propper /更好的方法,使幻燈片負載圖片來自一個文本,即只有圖像(即是在一個人的全名子文件夾)正在聆聽?

感謝您的任何建議。

g.r.

+0

使用['XML'](http://livedocs.adobe.com/flash/9.0/ActionScriptLangRefV3/XML.html)。請爲上帝之愛使用['XML'](http://livedocs.adobe.com/flash/9.0/ActionScriptLangRefV3/XML.html)。 – Marty 2012-04-02 08:45:30

+0

我會,但我不應該! 我正在製作的網站是愚蠢的人,他們只是聰明的寫一些圖像名稱到文本文件! 如果我想在xml中創建所有的東西,我已經可以做到了;) – Ace 2012-04-02 08:48:40

+0

我發現它更容易解釋如何複製和粘貼節點,比如''可以在新行或任何他們想要的內容上縮進/分離,而不會破壞所有內容,而不會破壞需要更嚴格佈局的文本文件。無論如何,排隊你的圖片,而不是一次加載它們來解決你的問題。 – Marty 2012-04-02 08:50:53

回答

1

排隊您的圖像加載,讓他們訂購。

粗糙例如:

var queue:Array = []; // Populated from your text/whatever file. 
// If you want the images to load from first to last you will need 
// to use queue.reverse() once you get the filenames. 

/** 
* Beings loading the next image in queue. 
* Ignored if the queue has no remaining items. 
*/ 
function loadNext():void 
{ 
    if(queue.length > 0) 
    { 
     var imgSrc:String = queue.pop(); 

     var ldr:Loader = new Loader(); 
     ldr.load(new URLRequest(imgSrc)); 

     ldr.addEventListener(Event.COMPLETE, _done); 
    } 
} 


/** 
* Called once a Loader instance has finished loading a resource. 
* @param e Event.COMPLETE. 
*/ 
function _done(e:Event):void 
{ 
    e.target.removeEventListener(Event.COMPLETE, _done); 
    container.addChild(e.target as DisplayObject); 

    // Begin loading the next image in queue. 
    loadNext(); 
} 
+0

thx您的快速回復,現在我看到了這個背後的想法。似乎很明顯^^ 我會試一試... – Ace 2012-04-02 08:57:59

+0

@Ace沒有probs。是的,應該把你推向正確的方向。 – Marty 2012-04-02 09:01:04

+0

現在我剛剛使用了雙重功能的想法,互相呼叫,但我完全修改了代碼。 反正這是一個正確的答案^^ – Ace 2012-04-02 11:16:04