嘗試隨機選取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