FLASH AS3 - 从文本文件动态加载幻灯片

时间:2012-04-02 08:42:30

标签: actionscript-3 flash image dynamic slideshow

我为幻灯片显示了一个简单的代码,动态加载子文件夹中的图像,具体取决于文本文件中的内容。

代码:

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

2.png已加载

加载3.png

添加3.png

2.png已添加

所以我的问题:

有没有其他更好的方法可以让幻灯片从文本文件中加载图像,只需要监听图像的全名(在子文件夹中)?

感谢您的任何建议。

g.r。

1 个答案:

答案 0 :(得分: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();
}