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

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

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

Регистрация: Jul 2008
Сообщений: 6
Melody 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]
Помогите в чем же ошибка, ато никак не могу разобратся


Последний раз редактировалось Le1; 29.10.2008 в 18:06.
Старый 29.10.2008, 19:13
NePridymal вне форума Посмотреть профиль Отправить личное сообщение для NePridymal Найти все сообщения от NePridymal
  № 2  
Ответить с цитированием
NePridymal
 
Аватар для NePridymal

Регистрация: Apr 2007
Сообщений: 143
Отправить сообщение для NePridymal с помощью ICQ
Так как по event-у выводится значение, содержащееся в ячейке i ( а это одна ячейка в памяти, с одним адресом) то понятное дело что после прохождения цикла выводится 10, т.к. в этой ячейке содержится 10, и все трейсы просто выводят это значение.

Старый 29.10.2008, 19:24
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 3  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,784
Ну вы же трейсите конечное значение итератора i после выполнения цикла, всё верно.

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

Регистрация: Jul 2008
Сообщений: 6
Цитата:
Сообщение от __etc Посмотреть сообщение
Ну вы же трейсите конечное значение итератора i после выполнения цикла, всё верно.
А как же мне тогда присоеденить addEventListener к мувиклипом которые генерируются в цикле, затем при Mouse_Over мне надо для каждого клипа сделать соответствующее действие, писать все рукой типа mc1.addEventListener, mc2.addEventListener и т.д. невозможно, так как все будет генерироватся динамически и ссылатся на одну функцию, где по номеру муви клипа будет соответствующее дейстиве ?
Помогите пожалуйста

Старый 30.10.2008, 12:46
†‡Paladin‡† вне форума Посмотреть профиль Отправить личное сообщение для †‡Paladin‡† Найти все сообщения от †‡Paladin‡†
  № 5  
Ответить с цитированием
†‡Paladin‡†

Регистрация: Nov 2005
Сообщений: 1,058
Попробуй так написать.
Код:
pageArray[i].addEventListener(MouseEvent.MOUSE_OVER, function onMouseOver(event:Event) {trace(event.target)});

Старый 30.10.2008, 13:18
Le1 вне форума Посмотреть профиль Отправить личное сообщение для Le1 Найти все сообщения от Le1
  № 6  
Ответить с цитированием
Le1

Регистрация: Jul 2008
Сообщений: 6
Цитата:
Сообщение от †‡Paladin‡† Посмотреть сообщение
Попробуй так написать.
Код:
pageArray[i].addEventListener(MouseEvent.MOUSE_OVER, function onMouseOver(event:Event) {trace(event.target)});
Так может и будет работать, но все равно меня так не устроит, мне нужна отдельная функция а не внутри addEventListener-а, как можно передать внешней функции ?

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

Старый 30.10.2008, 14:16
iNils вне форума Посмотреть профиль Отправить личное сообщение для iNils Посетить домашнюю страницу iNils Найти все сообщения от iNils
  № 7  
Ответить с цитированием
iNils
Негуру
 
Аватар для iNils

администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,879
Записей в блоге: 7
Нет ни какой ошибки.
Добавьте после
Код:
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 без цифр.
__________________
(и)Нильс.ru | Плагины для FlashDevelop

Старый 30.10.2008, 14:20
NePridymal вне форума Посмотреть профиль Отправить личное сообщение для NePridymal Найти все сообщения от NePridymal
  № 8  
Ответить с цитированием
NePridymal
 
Аватар для NePridymal

Регистрация: Apr 2007
Сообщений: 143
Отправить сообщение для NePridymal с помощью ICQ
Как вариант - повесить на все объекты одну функцию, а уже в этой функции по event.target определять какое действие вызвать. Если же нужен именно порядковый номер, то т.к. все объекты хранятся в массиве, можно используя этот массив и event.target узнать порядковый номер этого объекта.

Старый 30.10.2008, 16:03
Anry_coolboy вне форума Посмотреть профиль Отправить личное сообщение для Anry_coolboy Найти все сообщения от Anry_coolboy
  № 9  
Ответить с цитированием
Anry_coolboy
 
Аватар для Anry_coolboy

Регистрация: Dec 2006
Адрес: Ukraine Lugansk
Сообщений: 188
Отправить сообщение для Anry_coolboy с помощью ICQ Отправить сообщение для Anry_coolboy с помощью Skype™
Я б сделал отдельный класс, который базировался от Мувиклипа, добавил бы к кему поле, и уже при создании цикла, присваивал полю значение.
Либо можно по имени, дать имя name1, name2, name3.. и уже потом вырезать последний индекс.
__________________
Работю в DigitalHouse

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

Теги
addeventlistener , цикл
Опции темы
Опции просмотра

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

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


 


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


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