尝试随机选取4张图像并将它们加载到数组中,然后在显示所有4张图像时使用计时器显示它们。将再次加载4张图像。这里是代码:AS3将多个外部图像加载到数组中?
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循环,它加载图像不会等待加载完成,任何继续循环。如何解决这个问题?或者你有更好的建议吗?
谢谢先进。
是的,这整件事情的建立真的很糟糕。我的建议,学习如何使用闪光灯,而无需使用ENTER_FRAME事件。这里将发生什么是你将每秒调用OnLoad 30-60次,直到加载一个图像。所以基本上这让我想知道你是否试图运行这个代码,因为它应该只是简单的崩溃闪存。 – 2011-04-02 13:01:01
谢谢jesse,叶,你注意到我有点新as3,真的有这个问题在脑海中如何保持一个功能,而不会导致它崩溃。就像在VB中,你可以使用DoEvents或类似的函数。 as3中如何可能?你知道任何参考,我可以学习有关这种编程的基本知识,而不必经过一切?谢谢 – Kourosh 2011-04-02 14:51:08
抱歉,对我的评论有负面评论,不意味着粗鲁或任何此类性质。为了解释,每次渲染帧时都会调用ENTER_FRAME事件。因此,假设您将Flash SWF的每秒帧数设置为120,则此方法将由闪存虚拟机(如果可能,基于硬件)每秒120次调用。所以把它想象成一个事件发生到每秒120次的回调会变糟。我会在图片库上发布一个带有视频教程链接的答案,然后您可以根据自己的需要修改该代码。 – 2011-04-02 14:55:14