尝试随机选择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循环不会等待加载完成并继续循环。怎么能解决?或者你建议更好的方法吗?
先谢谢。
答案 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语言。希望这对你的努力有所帮助。