не работает фнкция созанная внутри цикла
|
|
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 |
|
| |