Форум 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=178353)

Andy_go 19.04.2012 19:32

не работают функции прописанные внутри цикла
 
Вот такой код:
Код AS3:

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()

Где ошибка?
Что я не так написал?

54321go 19.04.2012 19:41

Сделайте лучше отдельной функцией. а в ней вместо
Код AS3:

сardInHandOutline[iOne].visible = true;

сделаейте
Код AS3:

e.currentTarget.visible = true;


Andy_go 19.04.2012 19:50

Там по задумке появляется и исчезает рамочка вокруг основного объекта, а то что вы предложили приводит к исчезновению самого объекта:)

bublic_bicubic 19.04.2012 19:58

особенности областей видимости.
Функции работают, но во время выполнения iOne = handLength, то есть сardInHandOutline[iOne] = undefined
Всю эту конструкцию можно обернуть в вызов функции (Javascript-way):
Код AS3:

//активируем подсветку при наведении
( function ( card:InteractiveObject, outline:DisplayObject ):void {
        card.addEventListener( MouseEvent.MOUSE_OVER, function ( e:MouseEvent ):void {
                outline.visible = true;
        } );
        card.addEventListener( MouseEvent.MOUSE_OUT, function ( e:MouseEvent ):void {
                outline.visible = false;
        } );
} )( cardInHand[ iOne ], сardInHandOutline[ iOne ] );

Но я бы рекомендовал написать отдельный класс для карты:
Код AS3:

class CardInHand extends Sprite {
        private var body:InteractiveObject;
        private var outline:DisplayObject;
        public function CardInHand( bodyClass:Class, outlineClass:Class ) {
                body = new bodyClass();
                outline = new outlineClass();
                addChild( body );
                addChild( outline );
                outline.visible = false;
                addEventListener( MouseEvent.ROLL_OVER, onRollOver );
                addEventListener( MouseEvent.ROLL_OUT, onRollOut );
        }
        private function onRollOver( e:MouseEvent ):void {
                outline.visible = true;
        }
        private function onRollOut( e:MouseEvent ):void {
                outline.visible = false;
        }
}


54321go 19.04.2012 21:10

Ага не заметил можно передать в переменную
Код AS3:

сardInHand[iOne].clip=new MovieClip();
сardInHand[iOne].clip=сardInHandOutline
[iOne]

а потом вызывать
Код AS3:

e.currentTarget.clip.visible = true;

как-то так

Andy_go 19.04.2012 22:25

Спасибо за ответы.
54321go: ваш новый вариант выдает ошибку: 1120: Обращение несуществующего свойства сardInHand.

bublic_bicubic: этот вариант я сегодня уже не осилю(глаза в кучу под конец дня), завтра попробую и отпишу что получилось.

Добавлено через 19 часов 10 минут
bublic_bicubic: никак в толк не возьму как с классами, в том числе и с этим работать. Вот написал я его, а дальше с ним что делать? как его прикрутить к моему конкретному коду?
Не судите строго, я только начал разбираться в АS...


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

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