【问题标题】:FLASH AS3 - Dynamicly Loaded Slideshow From Txt FileFLASH AS3 - 从 Txt 文件动态加载幻灯片
【发布时间】:2012-04-15 22:14:30
【问题描述】:

我已经为幻灯片制作了一个简单的代码,它可以根据文本文件中的列表动态加载子文件夹中的图像。

代码:

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

所以我的问题:

是否有任何其他更合适/更好的方法可以使幻灯片从文本文件中加载图像,其中只有图像的全名(位于子文件夹中)是 listet?

感谢您的任何建议。

g.r.

【问题讨论】:

  • 使用XML。看在上帝的份上,请使用XML
  • 我愿意,但我不应该!我正在制作的网站是为愚蠢的人准备的,他们足够聪明,可以将一些图像名称写入文本文件!如果我想在 xml 中制作整个东西,我可能已经完成了;)
  • 我发现更容易解释如何复制和粘贴像 &lt;slide file="something.jpg" /&gt; 这样的节点,他们可以在新行或任何他们想要的内容上缩进/分隔而不破坏所有内容,而不是让他们破坏需要的文本文件更严格的布局。不管怎样,排队你的图片而不是一次加载它们来解决你的问题。
  • “验证”文本文件的代码在 php 外部,在解决此问题后将修复。所以逐行,我认为这是最简单和最简单的方法......你对队列的意思是什么?你有例子吗?

标签: actionscript-3 flash image dynamic slideshow


【解决方案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();
}

【讨论】:

  • 感谢您的快速回复,现在我明白了这背后的想法。看起来很明显^^我会试一试......
  • 现在我刚刚将这个想法与相互调用的双重函数一起使用,但我已经完全修改了代码。无论如何,这是一个正确的答案^^
猜你喜欢
  • 2013-10-11
  • 2018-01-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-11
  • 2010-11-15
相关资源
最近更新 更多