Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Динамический путь для EventListener (http://www.flasher.ru/forum/showthread.php?t=157703)

GLuKed 09.06.2011 15:15

Динамический путь для EventListener
 
Добрый день

Есть следующая структура flash ролика: map.материк.страна

Муви клипы с материками и странами загоняю в 2 массива.

мне нужно на все материки и страны повесить addEventListener сохраняя иерархию.
Но не выходит для addEventListener прописать двойную переменную в пути к мувику.

Вот код как я делаю, может подскажите как правильно?

Код AS3:

var materiki:Array = new Array();
var str:Array = new Array();
for(var m:int = 1; m <= map.numChildren-1; m++){
 
var strani = map.getChildAt(m);
        materiki.push(strani);
 
}
for each (var item:* in materiki) {
var iname = item.name
var inum = map[iname].numChildren-1;
 
        for(var mm:int = 1; mm <= inum; mm++){
                var strana = map[iname].getChildAt(mm);
                str.push(strana);
 
        }
}
for each (var itemm:* in materiki) {
        var itemvar = itemm.name;
 
        map[itemvar].addEventListener(MouseEvent.CLICK, callLinkmat);
map[itemvar].addEventListener(MouseEvent.MOUSE_OVER,zoominmat);
map[itemvar].addEventListener(MouseEvent.MOUSE_OUT,zoomoutmat);
for each (var itemstr:* in str) {
        var itemst = itemm.name +"."+ itemstr.name;
 
 
        map[itemst].addEventListener(MouseEvent.CLICK, callLinkmat);
map[itemst].addEventListener(MouseEvent.MOUSE_OVER,zoominmat);
map[itemst].addEventListener(MouseEvent.MOUSE_OUT,zoomoutmat);
}
}

Следующий код для материков работает, а на страны Listener не вешает, выдает в output ошибку:
TypeError: Error #1010: Термин не определен и не имеет свойств.
at flashmapgreen_fla::MainTimeline/frame1()


Чувствую что в какой то мелочи ошибся, но увы не удается найти где.

kackbip 09.06.2011 15:18

Суть ошибки в том, что идет обращение к неопределенному(равному null) объекту.
Нужно поставить в цикле трейсы и понять на что конкретно ругается.

in4core 09.06.2011 15:21

Код AS3:

for each (var itemstr:* in str) {
        var itemst = itemm.name +"."+ itemstr.name;
        trace( itemst , map[itemst] ) // увидишь сразу какого элемента не существует.
 
        map[itemst].addEventListener(MouseEvent.CLICK, callLinkmat);
map[itemst].addEventListener(MouseEvent.MOUSE_OVER,zoominmat);
map[itemst].addEventListener(MouseEvent.MOUSE_OUT,zoomoutmat);
}


GLuKed 09.06.2011 15:28

не существует map[itemst] судя по трейсу, itemst есть выводит в виде "south_america.instance_16". Тогда как к этому пути привязать addEventListener?

пробовал еще вот таким способом, но увы тоже не работает.
Код AS3:

var itemst ="map." +itemm.name +"."+ itemstr.name;
          trace( itemst , map[itemst] )
 
        [itemst].addEventListener(MouseEvent.CLICK, callLinkmat);
[itemst].addEventListener(MouseEvent.MOUSE_OVER,zoominmat);
[itemst].addEventListener(MouseEvent.MOUSE_OUT,zoomoutmat);


in4core 09.06.2011 15:34

"south_america.instance_16" а такой клип то сущестсует вы проверяли?! Интсанс постоянно меняется. задавайте пути конкретно!

GLuKed 09.06.2011 15:38

существует 100%, инстанс это инстанс имя мувиклипа.

По всей видимости в пути для addEventListener нельзя использовать строковые переменные, но как тогда сделать путь на объект где в пути 2 динамические переменные?

-De- 09.06.2011 15:57

Сделайте map - Dictionary, а не object и храните там не имена обьектов, а сами обьекты (ну, т.е. ссылки на них).
UPD: а, там всё запущено %) ну идея где-то такая, но лень в этом рыться. Ну, в общем, по имени обьект почти никогда доставать не надо.

GLuKed 09.06.2011 16:03

Все разобрался, спасибо всем большое, проблема была в двойном цикле, внутри которого создавались пути на не существующие объекты. За советы тоже отдельное спасибо.


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

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