Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Вопрос по Event-ам (http://www.flasher.ru/forum/showthread.php?t=120824)

Vikar 31.01.2009 17:26

Вопрос по Event-ам
 
Вот,
как узнать в функции обработки события значение i?

Массивы DATA и loader должны соответствовать по своим индексам.
Код AS3:

var loader:Array = new Array();
var DATA:Array=new Array();
var i:int=0;
var req:URLRequest;
for (i=0;i<100;i++) {
req=new URLRequest("xxxxx"+i+"xx.xx");
loader[i]=new URLLoader();
loader[i].addEventListener(Event.COMPLETE, complete);
loader[i].load(req);
}
 
function complete(ev:Event):void {
//DATA[???]=event.target.data;
// Как тут узнать значение i элемента массива, с которым произошло это событие?
}


Kuruki 31.01.2009 18:04

Ну как вариант расширить URLLoader свойством, в котором сохранять значение id.
Код AS3:

package  
{
        import flash.net.URLLoader;
        import flash.net.URLRequest;
 
        public class MyLoader extends URLLoader
        {
                public var id:int;
 
                public function MyLoader(request:URLRequest = null)
                {
                        super(request);
                }
        }
}

Код AS3:

var loader:Array = new Array();
var i:int=0;
var req:URLRequest;
for (i=0;i<100;i++) {
req=new URLRequest("xxxxx"+i+"xx.xx");
loader[i]=new MyLoader();
loader[i].id = i;
loader[i].addEventListener(Event.COMPLETE, complete);
loader[i].load(req);
}
 
function complete(ev:Event):void {
trace((ev.target as MyLoader).id);
}


Волгоградец 31.01.2009 18:12

Код AS3:

function complete(ev:Event):void {
  for (var i:Number = 0; i < loader.length; i ++){
      if (URLLoader(e.target) == URLLoader(loader[i])) {
        DATA[i] = event.target.data;
      }
  }
}


etc 31.01.2009 20:33

Зачем вам вообще массив DATA?

Alex Lexcuk 31.01.2009 21:14

так наверно лучше
Код:

var loader:Array = new Array();
var DATA:Array=new Array();
var i:int=0;
var req:URLRequest;
i=0


req=new URLRequest("xxxxx"+i+"xx.xx");
loader[i]=new URLLoader();
loader[i].addEventListener(Event.COMPLETE, complete);
loader[i].load(req);
i++;
 
function complete(ev:Event):void {
if (i<100){
//DATA[???]=event.target.data;
// Как тут узнать значение i элемента массива, с которым произошло это событие?
req=new URLRequest("xxxxx"+i+"xx.xx");
loader[i]=new URLLoader();
loader[i].addEventListener(Event.COMPLETE, complete);
loader[i].load(req);

i++;
}
}

так будет загрузка происходить таким образом
Сначала один,
потом второй
...
ну и так далее по очереди.
А у вас сразу 100 почти одновременно (с разничей в микронаносекунды тактовой частоты процессора)
и не загрузятся вообще. А так может быть до первого не найденного файла.

BlooDHounD 31.01.2009 21:46

Волгоградец, это Вы всегда вместо indexOf используете?

Добавлено через 7 минут
тут даже ещё смешнее:
Код AS3:

function complete(ev:Event):void {
  // каждый раз запрашиваем length, что бы цикл подольше работал. и ещё тут очень необходима дробная часть i, вдруг итерация будет дробной?
  for (var i:Number = 0; i < loader.length; i ++){
      //тут, чтобы сравнить 2 объекта, мы зачем-то сперва их конвертируем, и потом пытаемся сравнить 2 объекта, а не пытаемся выяснить тот ли это объект. нам же недостаточно строгого сравнения. причём откуда-то берётся некий объект "e".
      if (URLLoader(e.target) == URLLoader(loader[i])) {
        // а тут уже появляется некий event. причём тут нам приведение типов нафиг не надо.
        DATA[i] = event.target.data;
      }
  }
}

Код AS3:

function complete(event:Event):void {
  var i:int = loader.indexOf( event.target );
  if ( i>=0 ) {
      DATA[i] = ( event.target as URLLoader ).data;
  }
}


Nirth 31.01.2009 22:19

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

etc 01.02.2009 02:53

Если есть массив loader, за каким хреном вам массив DATA? Получить данные можно и из массива loader всё по тем же индексам.

Vikar 03.02.2009 12:39

то просто короткий пример был
DATA у меня может быть массив TextField-ов или Мувиклипов, а Лоадером я загружаю данные для них (например чтобы вставить в соответствующие TextFieldы).
Загружать приходится много и все сразу.

Alex Lexcuk, можно одновременно грузить сколько угодно данных, они все корректно загрузятся. Но последовательная загрузка хороша тем что не будет тормозов :)

BlooDHounD 03.02.2009 13:22

Vikar, неа. одновременно бровзеры разрешают открывать до 2-4 соединение. если грузится будет много, то они тупо порвутся по таймаутам.


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

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