Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Поиск рулит! Сообщения за день Все разделы прочитаны
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 09.06.2011, 15:15
GLuKed вне форума Посмотреть профиль Отправить личное сообщение для GLuKed Найти все сообщения от GLuKed
  № 1  
Ответить с цитированием
GLuKed

Регистрация: Mar 2007
Сообщений: 12
По умолчанию Динамический путь для 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()


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

Старый 09.06.2011, 15:18
kackbip вне форума Посмотреть профиль Отправить личное сообщение для kackbip Найти все сообщения от kackbip
  № 2  
Ответить с цитированием
kackbip
 
Аватар для kackbip

Регистрация: Sep 2007
Адрес: Tomsk
Сообщений: 943
Отправить сообщение для kackbip с помощью ICQ Отправить сообщение для kackbip с помощью Skype™
Суть ошибки в том, что идет обращение к неопределенному(равному null) объекту.
Нужно поставить в цикле трейсы и понять на что конкретно ругается.

Старый 09.06.2011, 15:21
in4core вне форума Посмотреть профиль Отправить личное сообщение для in4core Найти все сообщения от in4core
  № 3  
Ответить с цитированием
in4core
[+4 06.05.14]
 
Аватар для in4core

Регистрация: Mar 2009
Сообщений: 4,219
Записей в блоге: 14
Код 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);
}
__________________
Марк Tween

Старый 09.06.2011, 15:28
GLuKed вне форума Посмотреть профиль Отправить личное сообщение для GLuKed Найти все сообщения от GLuKed
  № 4  
Ответить с цитированием
GLuKed

Регистрация: Mar 2007
Сообщений: 12
не существует 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);

Старый 09.06.2011, 15:34
in4core вне форума Посмотреть профиль Отправить личное сообщение для in4core Найти все сообщения от in4core
  № 5  
Ответить с цитированием
in4core
[+4 06.05.14]
 
Аватар для in4core

Регистрация: Mar 2009
Сообщений: 4,219
Записей в блоге: 14
"south_america.instance_16" а такой клип то сущестсует вы проверяли?! Интсанс постоянно меняется. задавайте пути конкретно!
__________________
Марк Tween

Старый 09.06.2011, 15:38
GLuKed вне форума Посмотреть профиль Отправить личное сообщение для GLuKed Найти все сообщения от GLuKed
  № 6  
Ответить с цитированием
GLuKed

Регистрация: Mar 2007
Сообщений: 12
существует 100%, инстанс это инстанс имя мувиклипа.

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

Старый 09.06.2011, 15:57
-De- вне форума Посмотреть профиль Отправить личное сообщение для -De- Найти все сообщения от -De-
  № 7  
Ответить с цитированием
-De-
 
Аватар для -De-

блогер
Регистрация: Oct 2005
Адрес: Днепродзержинск - город Брежнева и других логопедов
Сообщений: 1,421
Записей в блоге: 4
Отправить сообщение для -De- с помощью ICQ Отправить сообщение для -De- с помощью Skype™
Сделайте map - Dictionary, а не object и храните там не имена обьектов, а сами обьекты (ну, т.е. ссылки на них).
UPD: а, там всё запущено %) ну идея где-то такая, но лень в этом рыться. Ну, в общем, по имени обьект почти никогда доставать не надо.
__________________
Бобры отвечают на вопросы не потому, что знают на них ответы; они отвечают потому, что их спрашивают.


Последний раз редактировалось -De-; 09.06.2011 в 16:00.
Старый 09.06.2011, 16:03
GLuKed вне форума Посмотреть профиль Отправить личное сообщение для GLuKed Найти все сообщения от GLuKed
  № 8  
Ответить с цитированием
GLuKed

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

Создать новую тему Ответ Часовой пояс GMT +4, время: 20:30.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Теги
array , Error #1010 , EventListener
Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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