2012-04-02 15 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); 
    } 
} 

実際には画像は、ほぼランダムな順序で表示されていることを除いて私のために正常に動作します。

コードが読み込みに時間がかかりすぎると思いますので、その次に行くはずのものの後にロードされていますが、ムービークリップにその一部が追加されます。

ので、私は何を意味するか:

1.pngが1.pngがロードされている

3.pngをロードされている

2.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

+0

私はそうするだろうが、私はすべきではない! 私が作っているウェブサイトは、テキストファイルにいくつかのイメージ名を書くだけのスマートな人たちのためのものです! XMLですべてを作っていたければ、すでにそれを済ませていました;) – Ace

+0

''のようにノードをコピーして貼り付ける方が簡単です新しい行や、より厳密なレイアウトが必要なテキストファイルをmangleするのではなく、すべてを壊すことなく、必要なものをインデント/区切ることができます。とにかく、あなたの問題を解決するためにすべてを一度にロードするのではなく、イメージをキューに入れてください。 – Marty

答えて

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

+0

@Ace No probs。うん、あなたを正しい方向に押し込むべきです。 – Marty

+0

今私はちょうどお互いを呼び出す二重の関数でアイデアを使用しましたが、私はコードを完全に変更しました。とにかくそれは正しい答えでした^^ ^^ – Ace

関連する問題