Попытка выбрать 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;
}
}
Возможная проблема здесь будет то, что цикл, который загружает изображения не будет ждать загрузки, чтобы закончить и продолжает цикл вообще. Как это можно решить? Или вы предлагаете лучший способ?
Спасибо в продвижении.
Да, все это настроено просто очень плохо. Мое предложение, узнайте, как использовать flash без использования события ENTER_FRAME. Что будет здесь, вы собираетесь называть OnLoad 30-60 раз в одну секунду, пока не загрузится одно изображение. Таким образом, в основном это заставляет меня задаться вопросом, пытались ли вы даже запустить этот код, потому что он должен просто кратковременно мигать. –
Спасибо jesse, Ye, как вы заметили, я новичок в as3, и действительно имел в виду этот вопрос, как сохранить функцию, не вызывая ее сбой. Как и в vb, например, вы можете использовать такие функции DoEvents или что-то подобное. Как это возможно в as3.знаете ли вы какую-либо ссылку, где я могу узнать базовые знания об этом любопытном программировании, без необходимости проходить через все? спасибо – Kourosh
Извините за то, что я был отрицательным с моим комментарием, не значит быть грубым или что-то в этом роде. Чтобы объяснить, событие ENTER_FRAME вызывается каждый раз, когда создается фрейм. Поэтому давайте скажем, что вы устанавливаете количество кадров в секунду вашего Flash SWF до 120, этот метод будет вызываться виртуальной машиной Flash (по возможности на основе аппаратного обеспечения) 120 раз в секунду. Поэтому подумайте об этом как о отправке события на обратный вызов 120 раз в секунду, что будет плохо. Я отправлю ответ со ссылкой на видео-учебник по фотогалерее, и оттуда вы сможете адаптировать этот код, чтобы делать то, что хотите. –