AS3 Загрузка нескольких внешних изображений в массив? - PullRequest
0 голосов
/ 02 апреля 2011

Попытка выбрать 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, который загружает изображения, не будет ждать завершения загрузки и продолжит цикл вообще.Как это можно решить?Или вы предлагаете какой-нибудь лучший способ?

Спасибо заранее.

1 Ответ

2 голосов
/ 02 апреля 2011

Хорошо, нет видео-учебника по фотогалерее, но вот учебник Actionscript 3 о том, как сделать фотогалерею . Поскольку вы новичок в AS3, начните тут же, а затем изучите использование таймеров в AS3 для переключения ваших фотографий. Также мой совет: старайтесь избегать анимации и анимации по временной шкале, попробуйте чистый ActionScript. Это потому, что в основном flash - это инструмент / платформа с кризисом идентичности. Он предназначен для художников и аниматоров (отсюда временные рамки, дизайнерский интерфейс), а также для разработчиков. Когда вы смешиваете два мира, а затем переходите к более сложным проектам, все очень быстро запутывается. Но если вы делаете простые переходы, как подразумевается в вашем коде, это должно быть хорошо.

Убедитесь, что при изучении вы изучаете ActionScript 3. Actionscript 2 - это старый Flash AVM-язык (actionscript-виртуальная машина 1), и он примерно в 20 раз медленнее, чем ActionScript 3, не является безопасным или нестрогим языком. Actionscript 3 - это строгий типобезопасный строгий язык, основанный на стандартах языка ecmascript 3, который когда-то был базовой моделью для предложения в формате сценария ecma версии 4.0. Однако он был закрыт как новая спецификация благодаря таким людям, как Microsoft, и поэтому считается проприетарным языком, но все еще основан на открытых стандартах.

Что касается вашего кода, вы можете просто изменить метод onLoad, чтобы он сохранял счет через переменную-член класса, сколько раз был вызван обратный вызов onLoad. После того, как вы посчитали 4 раза (4 загрузки завершены), вы можете сбросить переменную обратно до 0. Кроме того, вместо того, чтобы помещать первые вызовы загрузки в событие ENTER_FRAME, вы можете изменить функцию на общую функцию и просто вызывать ее изнутри фрейм, на котором размещен этот actionScript. (Я предполагаю, что этот код просто напечатан на фрейме во 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

Этот веб-сайт также содержит множество бесплатных видеоуроков, которые помогут вам стать полноценным разработчиком флэш-памяти. Я сам получил основание во флэш-памяти строго от просмотра этих уроков, когда они только выходили. Оттуда вы, возможно, захотите ознакомиться с книгами / учебными пособиями по объектно-ориентированному программированию и шаблонам проектирования и их применению к языку actioncript 3. Надеюсь, что это поможет и всего наилучшего в ваших начинаниях.

...