FLASH AS3 - слайд-шоу с динамической загрузкой из TXT-файла - PullRequest
0 голосов
/ 02 апреля 2012

Я сделал простой код для слайд-шоу, которое динамически загружает изображения из подпапки, в зависимости от того, что находится в текстовом файле.

код:

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 Ответ

1 голос
/ 02 апреля 2012

Поставьте в очередь загрузку изображений, чтобы они были упорядочены.

Грубый пример:

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();
}
...