2011-04-02 3 views
0

Попытка выбрать 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; 
    } 
} 

Возможная проблема здесь будет то, что цикл, который загружает изображения не будет ждать загрузки, чтобы закончить и продолжает цикл вообще. Как это можно решить? Или вы предлагаете лучший способ?

Спасибо в продвижении.

+0

Да, все это настроено просто очень плохо. Мое предложение, узнайте, как использовать flash без использования события ENTER_FRAME. Что будет здесь, вы собираетесь называть OnLoad 30-60 раз в одну секунду, пока не загрузится одно изображение. Таким образом, в основном это заставляет меня задаться вопросом, пытались ли вы даже запустить этот код, потому что он должен просто кратковременно мигать. –

+0

Спасибо jesse, Ye, как вы заметили, я новичок в as3, и действительно имел в виду этот вопрос, как сохранить функцию, не вызывая ее сбой. Как и в vb, например, вы можете использовать такие функции DoEvents или что-то подобное. Как это возможно в as3.знаете ли вы какую-либо ссылку, где я могу узнать базовые знания об этом любопытном программировании, без необходимости проходить через все? спасибо – Kourosh

+0

Извините за то, что я был отрицательным с моим комментарием, не значит быть грубым или что-то в этом роде. Чтобы объяснить, событие ENTER_FRAME вызывается каждый раз, когда создается фрейм. Поэтому давайте скажем, что вы устанавливаете количество кадров в секунду вашего Flash SWF до 120, этот метод будет вызываться виртуальной машиной Flash (по возможности на основе аппаратного обеспечения) 120 раз в секунду. Поэтому подумайте об этом как о отправке события на обратный вызов 120 раз в секунду, что будет плохо. Я отправлю ответ со ссылкой на видео-учебник по фотогалерее, и оттуда вы сможете адаптировать этот код, чтобы делать то, что хотите. –

ответ

2

Хорошо, поэтому нет видеоуроки по фотогалерее, но here is an Actionscript 3 tutorial on how to make a photo gallery. Поскольку вы новичок в AS3, запустите там, а затем изучите использование таймеров в AS3 для переключения ваших фотографий. Кроме того, мой совет: старайтесь избегать создания анимации и анимации, старайтесь использовать чистый ActionScript. Это связано с тем, что в основном flash - это инструмент/платформа с кризисом идентичности. Это предназначено для использования для художников и аниматоров (отсюда и время, дизайнерский интерфейс), а также разработчики. Когда вы смешиваете два мира, а затем переходите к более сложным проектам, все становится очень быстрым. Но если вы делаете простые переходы, как это подразумевается в вашем коде, все должно быть в порядке.

Убедитесь, что при изучении вы изучаете ActionScript 3. ActionScript 2 - это старый Flash AVM-язык (виртуальная машина actioncript 1) и примерно на 20X медленнее, чем actioncript 3, является небезопасным или нестрогим языком. ActionScript 3 - это строгий языковой стандарт, основанный на типе, основанный на стандартах языка ecmascript 3, и в какой-то момент был базовой моделью для формата версии программного обеспечения ecma script версии 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(); 
} 

Кроме того, вы будете хотеть, чтобы узнать, как начать использовать классы, в том числе класса документа, если вы хотите стать серьезным, объектно-ориентированным разработчиком флэш. Вы можете найти ссылку на видео-учебник об этом здесь:

http://gotoandlearn.com/play.php?id=43

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

+0

Удивительный! Действительно полезно, вы указываете на вещи, о которых я всегда сомневался, поскольку я изучаю их по сравнению с игровым движком, таким как unit3d. В любом случае, спасибо за ваше время. – Kourosh

+0

Если вам интересно изучить хороший 3D-движок, то научитесь использовать новый API, выходящий в следующей крупной версии флеш-плеера. Графика и производительность или передний край. Подробнее здесь: http: //blog.ascensionsystems.ca/ и http://away3d.com//. –

Смежные вопросы