AS3将多个外部图像加载到阵列中?

时间:2011-04-02 11:55:03

标签: flash actionscript-3 image load external

尝试随机选择4张图像并将其加载到阵列中,然后在显示所有4张图像时使用计时器显示它们4将再次加载更多图像。这是代码:

var images : Array = new Array();
var rndNumbers : Array = new Array();
var imageLoader : Loader;
var imageTimer : Timer = new Timer(3000, 0);
var currImageID : int;
var imgID : int;
var loaded : Boolean = true;
var i : int;
var tmp : int = 0;
var rnd : int = 0;

addEventListener(Event.ENTER_FRAME, OnLoad);

imageTimer.addEventListener(TimerEvent.TIMER, ChangePicture);

function OnLoad(e : Event) : void {
    RandomNumbers();
    LoadImages();
}

function RandomNumbers() {
    for (var n = 0; n <= 3; n++) {
        rnd = 1 + Math.floor(Math.random() * 4);
        while (tmp == rnd) {
            rnd = 1 + Math.floor(Math.random() * 4);
        }
        tmp = rnd;
        rndNumbers[n] = rnd;
        trace(rnd);
    }
}

function LoadImages() : void {
    for (var i = 0; i <= rndNumbers.length - 1; i++) {
        imageLoader = new Loader;
        var urlRequest : URLRequest = new URLRequest("images/pic" + rndNumbers[i] + ".jpg");
        imageLoader.load(urlRequest);
        imageLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, LoadComplete);
    }
    imageTimer.start();
}

function LoadComplete(event : Event) {
    removeEventListener(Event.ENTER_FRAME, OnLoad);
    images[imgID] = imageLoader;
    imgID++;
}

function ChangePicture(event : TimerEvent) : void {
    transition.gotoAndPlay(1);
    Img_Box.addChild(images[currImageID]);
    if (currImageID != 3) {
        currImageID++;
    } else {
        RandomNumbers();
        LoadImages();
        currImageID = 0;
    }
}

这里可能存在的问题是加载图像的for循环不会等待加载完成并继续循环。怎么能解决?或者你建议更好的方法吗?

先谢谢。

1 个答案:

答案 0 :(得分:2)

好的,所以照片库上没有视频教程,只有here is an Actionscript 3 tutorial on how to make a photo gallery。由于您是AS3的新用户,请从那里开始,然后考虑在AS3中使用Timers来切换照片。另外我的建议是:尽量避免做时间线补间和动画,尝试去纯动作脚本。这是因为基本上flash是一个具有身份危机的工具/平台。它意味着用于艺术家和动画师(因此时间轴的东西,设计师UI)和开发人员。当你融合这两个世界,然后进入更复杂的项目时,事情会变得非常快。但是如果你正在进行简单的转换,就像你的代码中隐含的一样,这应该没问题。

确保在学习时,学习actionscript 3. Actionscript 2是旧的flash AVM语言(actionscript虚拟机1),它比动作脚本3慢约20倍,是一种非类型安全或非严格的语言。 Actionscript 3是一种基于ecmascript 3语言标准的类型安全严格语言,并且曾经是ecma脚本版本4.0格式命题的基本模型。然而,由于像微软这样的人,它被关闭为新的规范,因此被认为是专有语言,但仍然基于开放标准。

至于你的代码,你可以简单地改变onLoad方法,通过一个类成员变量来计算onLoad回调被调用的次数。一旦计数4次(完成4次加载),您就可以将变量重置为0.而且,不是将第一次加载调用放在ENTER_FRAME事件中,您可以将函数更改为泛型函数,并从内部调用它这个动作脚本放在框架上。 (我假设这个代码只是在flash FLA中的一个帧上输入)。例如:

//---->Delete this -->addEventListener(Event.ENTER_FRAME, OnLoad);

imageTimer.addEventListener(TimerEvent.TIMER, ChangePicture);

OnLoad(); // Manually call the first function to get the whole load/display loop going.

function OnLoad():void{

     RandomNumbers();
     LoadImages();
}

此外,如果您想成为一名认真的,面向对象的Flash开发人员,您还是想学习如何开始使用类,包括文档类。您可以在此处找到有关此视频教程的链接:

http://gotoandlearn.com/play.php?id=43

该网站还包含大量免费视频教程,可以帮助您成为一名成熟的Flash开发人员。我自己在闪存的基础上严格地从他们刚出来时看这些教程。从那里,您可能希望查看有关面向对象编程和设计模式的书籍/教程,以及它们如何应用于actionscript 3语言。希望这对你的努力有所帮助。