Среда, 20 Ноября 2024, 14:36

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
не работает фнкция созанная внутри цикла
Andy-goДата: Четверг, 19 Апреля 2012, 18:19 | Сообщение # 1
участник
Сейчас нет на сайте
Вот такой код:
Code

function onComplete(event:Event):void {     
     var recivedData = loader.data;
     var recivedDataArray:Array = JSON.decode(recivedData);

     //вычисляем длинну полученного массива
      var handLength = recivedDataArray.length;
     //создаен переменные для использования внутри цикла  
      var xCHCoor = 100;
      var yCHCoor = 600;
      var xCHOutlineCoor = 98;
      var yCHOutlineCoor = 598;
      var parametr = 0;
     //создаем массивы для того чтобы использовать их в цикеле для сериализации переменных
      var cardInHand:Array=[];
      var сardInHandOutline:Array=[];      
      for(var iOne: int = 0; iOne < handLength; iOne++){  
          
       //переводим текст полученный с сервера в название класса объекта
       var cardInHandClass:Class = getDefinitionByName(recivedDataArray[iOne]) as Class;
        
       //отображаем "карты на руках"      
       cardInHand[iOne] = new cardInHandClass();       
       cardInHand[iOne].x = xCHCoor;
       cardInHand[iOne].y = yCHCoor;
       addChild(cardInHand[iOne]);
       xCHCoor = xCHCoor + 80;
        
       //добавляем картинки "подсветки" карт
       сardInHandOutline[iOne] = new outlineForCardsInHandGreen();
       сardInHandOutline[iOne].x = xCHOutlineCoor;
       сardInHandOutline[iOne].y = yCHOutlineCoor;
       addChild(сardInHandOutline[iOne]);
       xCHOutlineCoor = xCHOutlineCoor +80;
       сardInHandOutline[iOne].visible = false;
       
      //активируем подсветку при наведении
       cardInHand[iOne].addEventListener(MouseEvent.MOUSE_OVER, function (e:MouseEvent):void{
         сardInHandOutline[iOne].visible = true;
        });
       cardInHand[iOne].addEventListener(MouseEvent.MOUSE_OUT, function (e:MouseEvent):void{
         сardInHandOutline[iOne].visible = false;
        });
        
      }


Все работает как должно, НО при наведении курсора на объект cardInHand[iOne], вместо выполнения приписанной ему функции выскакивает ошибка: TypeError: Error #1010: Термин не определен и не имеет свойств.
at MethodInfo-235()

Что я не так написал?
ек0нДата: Четверг, 19 Апреля 2012, 19:23 | Сообщение # 2
участник
Сейчас нет на сайте
Quote
Code
cardInHand[iOne].addEventListener(MouseEvent.MOUSE_OVER, function (e:MouseEvent):void{   
           сardInHandOutline[iOne].visible = true;   
          });

Я что-то не пойму, как функция одного объекта должна менять свойство другого объекта, при этом не имея нигде ссылки на него (добавляешь функцию к cardInHand, а visble меняешь у сardInHandOutline). В этом ошибка? Поменяй cardInHand на сardInHandOutline


Сообщение отредактировал ек0н - Четверг, 19 Апреля 2012, 19:30
Andy-goДата: Четверг, 19 Апреля 2012, 20:25 | Сообщение # 3
участник
Сейчас нет на сайте
нет, там ошибки нет, именно так все и работает. Проблема именно в том что выполняется все внутри цикла, всме то же вне цуикла работает, но тогда придется писать кучу функция для каждого из объектов, что плохо та как их кол-во непостоянно.
ек0нДата: Четверг, 19 Апреля 2012, 21:59 | Сообщение # 4
участник
Сейчас нет на сайте
Я пытался воспроизвести присваивание функций в цикле, и у меня все работало, так что не думаю, что дело в цикле.

А вообще, это все можно было бы в самом классе прописать, и не усложнять читаемость кода присваиванием анонимок.
Andy-goДата: Пятница, 20 Апреля 2012, 10:40 | Сообщение # 5
участник
Сейчас нет на сайте
Выложи пожалуйста здесь работающий код с присваиванием функция в цикле
ек0нДата: Пятница, 20 Апреля 2012, 11:20 | Сообщение # 6
участник
Сейчас нет на сайте
Code
      
var arr:Array = [];
for (var i:int = 0; i < 10; i++) {
       arr[i] = new Sprite()
       arr[i].addEventListener(Event.ADDED, function ():void {
           trace("OK")
       });
       addChild(arr[i]);
}


Добавлено (20.04.2012, 11:20)
---------------------------------------------
И даже с взаимодействием между двумя объектами в массивах работает:
Code
     
var arr:Array = [];
var secArr:Array = []
for (var i:int = 0; i < 10; i++) {
     arr[i] = new Sprite();
     secArr[i] = new Sprite ();
     arr[i].addEventListener(Event.ADDED, function ():void {
        secArr[i].x = i;
     });
     addChild(arr[i]);
     trace (secArr[i].x);
}

// 0 1 2 ... 9


Сообщение отредактировал ек0н - Пятница, 20 Апреля 2012, 11:24
Andy-goДата: Пятница, 20 Апреля 2012, 15:18 | Сообщение # 7
участник
Сейчас нет на сайте
Интересно в чем же тогда заморочка.. буду пробовать на примере твоего рабочего кода, спасибо за него.

Сообщение отредактировал Andy-go - Пятница, 20 Апреля 2012, 15:22
  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг