Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   addEventListener в цикле (http://www.flasher.ru/forum/showthread.php?t=117528)

Le1 29.10.2008 17:50

addEventListener в цикле
 
Привет всем, у меня вопрос насчет использования addEventListener в цикле
Вот мой пример:
Код:

        for(i=0; i< 10; i++)
        {
pageArray[i].addEventListener(MouseEvent.MOUSE_OVER, function({trace(i)});
        }

У меня всегда выводит trace 10

Пробовал и так:
Код:

for(i=0; i< myXML.menu_item.length(); i++)
        {
                pageArray.push(i);
                pageArray[i]= new page_item();
                rootpages.addChild(pageArray[i]);
                rootpages.setChildIndex(pageArray[i],0);
                pageArray[i].page.tab_txt.text = ("menu "+i);
                pageArray[i].x=pagex-i*40;
                pageArray[i].y=pagey+i*11;
                pageArray[i].scaleX = pageArray[i].scaleX-0.025*i;
                pageArray[i].scaleY = pageArray[i].scaleY-0.025*i;
                tweenArray[i] = new Tween(pageArray[i],"x",Strong.easeOut,pageArray[i].x+400,pageArray[i].x,2,true);
               
                img_request = new URLRequest("img"+i+".jpg");
                img_loader = new Loader();
                img_loader.load(img_request);         
                pageArray[i].page.imageloader.addChild(img_loader);
                //tw.addEventListener(TweenEvent.MOTION_FINISH, tweenfinish);
               
                pageArray[i].page.over.addEventListener(MouseEvent.MOUSE_OVER, printscreen);
        }

function printscreen(e:MouseEvent):void
{
       
        trace(e.currentTarget.parent);
       
}

Но в результате получаю:
Код:

[object page_5]
[object page_5]
[object page_5]
[object page_5]
[object page_5]
[object page_5]

Вместо
Код:

[object page_1]
[object page_2]
[object page_3]
[object page_4]
[object page_5]

Помогите в чем же ошибка, ато никак не могу разобратся :(

NePridymal 29.10.2008 19:13

Так как по event-у выводится значение, содержащееся в ячейке i ( а это одна ячейка в памяти, с одним адресом) то понятное дело что после прохождения цикла выводится 10, т.к. в этой ячейке содержится 10, и все трейсы просто выводят это значение.

etc 29.10.2008 19:24

Ну вы же трейсите конечное значение итератора i после выполнения цикла, всё верно.

Le1 30.10.2008 12:28

Цитата:

Сообщение от __etc (Сообщение 773631)
Ну вы же трейсите конечное значение итератора i после выполнения цикла, всё верно.

А как же мне тогда присоеденить addEventListener к мувиклипом которые генерируются в цикле, затем при Mouse_Over мне надо для каждого клипа сделать соответствующее действие, писать все рукой типа mc1.addEventListener, mc2.addEventListener и т.д. невозможно, так как все будет генерироватся динамически и ссылатся на одну функцию, где по номеру муви клипа будет соответствующее дейстиве ?
Помогите пожалуйста

†‡Paladin‡† 30.10.2008 12:46

Попробуй так написать.
Код:

pageArray[i].addEventListener(MouseEvent.MOUSE_OVER, function onMouseOver(event:Event) {trace(event.target)});

Le1 30.10.2008 13:18

Цитата:

Сообщение от †‡Paladin‡† (Сообщение 773770)
Попробуй так написать.
Код:

pageArray[i].addEventListener(MouseEvent.MOUSE_OVER, function onMouseOver(event:Event) {trace(event.target)});

Так может и будет работать, но все равно меня так не устроит, мне нужна отдельная функция а не внутри addEventListener-а, как можно передать внешней функции ? :(

Запарился с поиском, в AS2 все работало в таких случаях :(

iNils 30.10.2008 14:16

Нет ни какой ошибки.
Добавьте после
Код:

pageArray[i].page.over.addEventListener(MouseEvent.MOUSE_OVER, printscreen);
строку
Код:

pageArray[i].page.x = i
и трейс смените на
Код:

trace(e.currentTarget.parent.x);
Будут выводится разные числа.
А 5 в page_5 говорит о том, что у объекта 5 уровень вложенности и имя его в библиотеки page. Если бы у него был персональный класс, например Iam, то в трейсе было просто Iam без цифр.

NePridymal 30.10.2008 14:20

Как вариант - повесить на все объекты одну функцию, а уже в этой функции по event.target определять какое действие вызвать. Если же нужен именно порядковый номер, то т.к. все объекты хранятся в массиве, можно используя этот массив и event.target узнать порядковый номер этого объекта.

Anry_coolboy 30.10.2008 16:03

Я б сделал отдельный класс, который базировался от Мувиклипа, добавил бы к кему поле, и уже при создании цикла, присваивал полю значение.
Либо можно по имени, дать имя name1, name2, name3.. и уже потом вырезать последний индекс.


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

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