Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Как заставить цикл подождать (http://www.flasher.ru/forum/showthread.php?t=135833)

Tranki 02.02.2010 21:25

Как заставить цикл подождать
 
Как заставить цикл подождать к примеру пока загрузится фото,потому как события я так понял в нем не катят?

Jewelz 02.02.2010 21:41

break; а потом начать новый цикл с индекса в момент паузы

Tranki 02.02.2010 21:48

для каждого фото цикл писать чтоли?

Psycho Tiger 02.02.2010 21:57

Угу, который выполнится один раз.

Это вообще хорошое правила, писать цикл который выполнится 1 раз.

Crenth 02.02.2010 22:15

а сколько ждать ?
ну я имею ввиду, чем ждать: итерациями или милисекундами или до нажатия клавиши ?

Tranki 02.02.2010 23:10

ну вот как раз ровно столько чтоб загрузилась фото

silin 03.02.2010 00:19

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

Zebestov 03.02.2010 01:22

если речь о последовательной загрузке фотографий, то это иначе делается

Tranki 03.02.2010 01:26

а как тогда по другому реализовать?есть массив с адресами фоток,результат хочу иметь массив с уже загруженными обьектами?
Zebestov,и как?

Zebestov 03.02.2010 01:41

понял. речь не о последовательной загрузке. речь о том, как все это вообще загрузить. ну тогда цикл никого не должен ждать. проходишь по массиву URL-ов, при каждой итерации создаешь новый экземпляр Loader-а, на contentLoaderInfo экземпляра вешаешь один для всех обработчик по событию COMPLETE (INIT?), который исходя из e.target.url (собственно URL очередной обрабатываемой картинки) будет знать куда в массив пихать конкретно этот e.target.content (т.е. саму картинку). например myImagesArr[e.target.url] = e.target.content

Diestro 03.02.2010 01:42

Можно использовать класс GroupLoad библиотеки CASA

Tranki 03.02.2010 02:30

что я делаю не так?
Код AS3:

var loaded_foto:Array=new Array();
var pics:Loader;
for(var i=0;i<4;i++) {
 
photo_user='http...';
pics=new Loader;               
 
pics.contentLoaderInfo.addEventListener(Event.COMPLETE, onLoaded);         
pics.load(new URLRequest(photo_user));
 
function onLoaded(e:Event) {
    loaded_foto[e.target.url]=e.target.content;
 
                                }
 
}


Zebestov 03.02.2010 03:04

Код AS3:

// это надо прописать как свойство в самом вверху
// чтобы обеспечить видимость массива внутри класса
var loaded_foto:Array = [];
 
function photoLoader():void
{
      var photo_user:String;
      var pics:Loader;
      var i:int;
      for(i = 0; i < 4; i++)
      {
              photo_user = 'http...';
              pics = new Loader();               
 
              pics.contentLoaderInfo.addEventListener(Event.COMPLETE, onLoaded);         
              pics.load(new URLRequest(photo_user));
      }
}
 
function onLoaded(e:Event):void
{
      loaded_foto[e.target.url] = e.target.content;
 
      // и обязательно не забыть убрать слушатель
      // чтобы ненужный уже экземпляр Loader мог спокойно почить =)
      e.target.removeEventListener(Event.COMPLETE, onLoaded);
}

другими словами — не надо в цикле прописывать функцию-обработчик =) как я и написал — она одна на всех

Himerets 03.02.2010 12:03

Еще давно в голову пришла одна мысль, руки не доходили попробовать.
Интересно, в данном случае прокатит такое:

Код AS3:

private function imageLoadedHandler(e:Event):void
{
  imageLoaded = true;
}
 
private function procession():void
{
  for (var i:int = 0; i < c; i++)
  {
    //ждем загрузки
    while (!imageLoaded) {}
 
    //действуем))
    someAction();
  }
}

Или imageLoadedHandler не сможет выполниться, пока procession не закончится?

etc 03.02.2010 12:10

Himerets, среда однопоточная.

Tranki 03.02.2010 14:25

пишет Термин не определен и не имеет свойств,хотя все переменные определены..что это может быть?

Psycho Tiger 03.02.2010 20:51

Ну, наверное термин всё таки неопределён.

СлаваRa 03.02.2010 22:54

вклинюсь в тему, не проще ли, сделать свой класс для загрузки чего - либо, т.е. будет динамический класс, который будет создавать очередь загружаемого?

например:
передаем в класс линки того, что надо загрузить, функцию которая примет загруженное и имя очереди, ну как минимум, и этот класс последовательно грузит все, что стоит в данной очереди, далее след. очередь и т.д.,...

Tranki 04.02.2010 00:52

это строчка точно должна работать? потому что лаодед фото в конце концов остается пустой,а таргет урл и контент данные поступают нормально.
Код AS3:

loaded_foto[e.target.url] = e.target.content;


Psycho Tiger 04.02.2010 12:38

а loaded_foto у вас кто?

Zebestov 04.02.2010 13:02

На самом деле:

Цитата:

Не применяйте класс Array для создания массивов ассоциативных элементов (называемых также хэшами), которые представляют собой структуры данных, элементам которых присваиваются имена, а не числа. Чтобы создать массивы ассоциативных элементов, воспользуйтесь классом Object. Хотя ActionScript позволяет создавать массивы ассоциативных элементов с помощью класса Array, ни один из методов и свойств класса Array нельзя использовать с этими массивами.
Поэтому можно делать все совсем кошерно =) я лишь в качестве примера навскидку привел такое хранение загруженных имиджей. Хотя это должно 100% работать. Но, согласно цитате из документации, с ограничениями — не работают методы и свойства такого массива (вплоть до невозможности определить его длину)

Psycho Tiger 04.02.2010 13:33

2Автор: а, ну тогда используй Object.

Array - индексы числа
Object - строки
Dictionary - экземпляры классов

Tranki 04.02.2010 17:11

А можно мне обьекту pics какимто образов прикрепить новый параметр к примеру id чтобы потом в loaded_foto не по урлу а по этому айдишнику вставлять?
И как мне теперь к этому обьекту обратится по параметру урл.
Код AS3:

var loaded_foto:Object;
 
function photoLoader()
      {
 
var photos_user:String;
var pics:Loader;
var i:int;
 
for(i = 0; i <=max_users; i++)
      {
 
photos_user = user_catalog[i][3];
pics = new Loader();       
// pics.id=i к примеру так?       
pics.contentLoaderInfo.addEventListener(Event.COMPLETE, onLoaded);         
pics.load(new URLRequest(photos_user));
 
      }
//                     
function onLoaded(e:Event):void{
 
loaded_foto={urls:[e.target.url], foto:e.target.content} ;
// как вызвать обьект фото с определенным урлом?
addChild(loaded_foto.foto);
 
e.target.removeEventListener(Event.COMPLETE, onLoaded);
}
}
photoLoader();

Добавлено через 57 секунд
ошибка все равно вылазите хотя все определено((
Код:

TypeError: Error #1010: Термин не определен и не имеет свойств.
        at MethodInfo-119()
        at MethodInfo-122()
        at flash.events::EventDispatcher/dispatchEventFunction()
        at flash.events::EventDispatcher/dispatchEvent()
        at flash.net::URLLoader/onComplete()



Часовой пояс GMT +4, время: 01:22.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.