【发布时间】:2011-04-02 11:55:02
【问题描述】:
尝试随机选择 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 循环不会等待加载完成并继续循环。那怎么解决?或者你有什么更好的方法吗?
提前致谢。
【问题讨论】:
-
是的,这整件事的设置非常糟糕。我的建议是,学习如何在不使用 ENTER_FRAME 事件的情况下使用 flash。这里将发生的事情是您将每秒调用 OnLoad 30-60 次,直到加载一个图像。所以基本上这让我想知道你是否甚至试图运行这段代码,因为它应该只是简单的崩溃闪现。
-
谢谢 jesse,你注意到我对 as3 有点陌生,并且真的想到了如何保持函数运行而不导致崩溃的问题。就像在 vb 中一样,您可以使用诸如 DoEvents 之类的函数或类似的东西。在as3中怎么可能。你知道有什么参考资料可以让我学习关于这种编程的基本知识,而不必经历所有事情吗?谢谢
-
抱歉我的评论有点负面,并不是粗鲁或类似的事情。解释一下,每次渲染一帧时都会调用 ENTER_FRAME 事件。因此,假设您将闪存 SWF 的每秒帧数设置为 120,此方法将由闪存虚拟机(如果可能基于硬件)每秒调用 120 次。因此,可以将其视为每秒 120 次将事件分派给回调,这将变得很糟糕。我将在照片库上发布带有视频教程链接的答案,然后您可以从那里调整该代码以执行您想要的操作。
标签: flash actionscript-3 image load external