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

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

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

Регистрация: May 2009
Адрес: Санкт-Петербург
Сообщений: 79
По умолчанию Пользовательские события.регистрация прослушивателя в предке целевого объекта события

Есть главный класс Main. В нем создается экземпляр класса ChildClass и добавляется в список отображения. Необходимо чтобы событие, отправляемое экземпляром класса ChildClass могло прослушиваться в родителе этого экземпляра.

Листинг

Главный класс приложения
Код AS3:
package {
	import flash.display.MovieClip;
	import flash.events.*;
	public class Main extends MovieClip {
 
		var child1:ChildClass;
		public function Main() {
			addEventListener(ChildClass.NEWEVENT,newEventHandler);
			child1=new ChildClass();
			addChild(child1);
 
		}	
		private function newEventHandler(e:Event):void{
			trace("событие произошло");
		}
	}
}

класс в котором происходит диспечеризация события
Код AS3:
package {
	import flash.display.MovieClip;
	import flash.events.*;
	public class ChildClass extends MovieClip {		
		public static const NEWEVENT="newevent";
		public function ChildClass() {		
			dispatchEvent(new Event(ChildClass.NEWEVENT,true));
 
 
		}	
 
	}
}
Добавлено через 7 минут
Не могу понять почему не работает
В колин_муке написано:
Система иерархической диспетчеризации событий языка ActionScript позволяет каждому контейнеру отображаемых объектов регистрировать приемники для обработки событий, получателями которых являются отображаемые
объекты-потомки этого контейнера.


Последний раз редактировалось Maestro13; 30.12.2009 в 18:07.
Старый 30.12.2009, 16:23
marat_sa вне форума Посмотреть профиль Отправить личное сообщение для marat_sa Посетить домашнюю страницу marat_sa Найти все сообщения от marat_sa
  № 2  
Ответить с цитированием
marat_sa
 
Аватар для marat_sa

Регистрация: Nov 2006
Сообщений: 487
Отправить сообщение для marat_sa с помощью ICQ Отправить сообщение для marat_sa с помощью Skype™
Может быть
stage.addChild(child1);
заменить на
addChild(child1);
__________________
Стой! Опасная зона! Работа мозга!

Старый 30.12.2009, 16:24
Maestro13 вне форума Посмотреть профиль Отправить личное сообщение для Maestro13 Найти все сообщения от Maestro13
  № 3  
Ответить с цитированием
Maestro13

Регистрация: May 2009
Адрес: Санкт-Петербург
Сообщений: 79
Так stage.addChild(child1); и addChild(child1); тоже самое

Добавлено через 55 секунд
в данном случае

Добавлено через 13 минут
кстати если регистрирую событие child1.dispatchEvent(new Event(ChildClass.NEWEVENT,true)); в главном классе, тогда все работает, но мне нужно, чтобы событие регистрировалось именно в классе childClass.

Старый 30.12.2009, 17:33
Волгоградец вне форума Посмотреть профиль Отправить личное сообщение для Волгоградец Найти все сообщения от Волгоградец
  № 4  
Ответить с цитированием
Волгоградец
 
Аватар для Волгоградец

блогер
Регистрация: Sep 2007
Адрес: Гамбург
Сообщений: 1,648
Записей в блоге: 12
Ну дык цель вашего события - экземпляр ChildClass(). Если вы его подпишите на прослушку, то получите трейс. Но конечно же не тот, который в конструкторе, ибо пока не выполнится конструктор, вы подписаться не сможете.

Старый 30.12.2009, 17:45
Maestro13 вне форума Посмотреть профиль Отправить личное сообщение для Maestro13 Найти все сообщения от Maestro13
  № 5  
Ответить с цитированием
Maestro13

Регистрация: May 2009
Адрес: Санкт-Петербург
Сообщений: 79
А тоесть нужно сначала чтобы выполнился конструктор а потом уже подписываться на это событие?

Старый 30.12.2009, 17:47
silin вне форума Посмотреть профиль Посетить домашнюю страницу silin Найти все сообщения от silin
  № 6  
Ответить с цитированием
silin
 
Аватар для silin

блогер
Регистрация: Mar 2003
Адрес: Моск. обл.
Сообщений: 5,269
Записей в блоге: 6
во первых, stage и этот мувик Main не одно и то же: при добавлении child1 на stage событие никак не попадает в Main..(т.е тогда и слушать надо stage)
во вторых, событие вещается до того как child1 добавлен в дисплейЛист
т.е. проверять-то надо после addChild(child1);


Последний раз редактировалось silin; 30.12.2009 в 17:50.
Старый 30.12.2009, 17:49
Maestro13 вне форума Посмотреть профиль Отправить личное сообщение для Maestro13 Найти все сообщения от Maestro13
  № 7  
Ответить с цитированием
Maestro13

Регистрация: May 2009
Адрес: Санкт-Петербург
Сообщений: 79
Сделал так, работает!
Код AS3:
package {
	import flash.display.MovieClip;
	import flash.events.*;
	public class ChildClass extends MovieClip {		
		public static const NEWEVENT="newevent";		
	           public function newEvent():void{
                            dispatchEvent(new Event(ChildClass.NEWEVENT,true));
                      }
 
	}
}
Главный класс приложения
Код AS3:
package {
	import flash.display.MovieClip;
	import flash.events.*;
	public class Main extends MovieClip {
 
		var child1:ChildClass;
		public function Main() {
                                  child1=new ChildClass();
			addChild(child1);
			addEventListener(ChildClass.NEWEVENT,newEventHandler);
			child1.newEvent();
 
		}	
		private function newEventHandler(e:Event):void{
			trace("событие произошло");
		}
	}
}


Последний раз редактировалось Maestro13; 30.12.2009 в 18:11.
Старый 30.12.2009, 17:50
dimarik вне форума Посмотреть профиль Отправить личное сообщение для dimarik Найти все сообщения от dimarik
  № 8  
Ответить с цитированием
dimarik
.
 
Аватар для dimarik

модератор форума
Регистрация: Sep 2003
Адрес: Москва
Сообщений: 4,630
Записей в блоге: 20
Цитата:
Сообщение от Maestro13 Посмотреть сообщение
Есть главный класс Main. В нем создается экземпляр класса ChildClass
ChildClass от чего отнаследован? Объясните, почему у него такое название?
__________________
Воспитан в TimeZero. Работаю в Mail.ru.

Старый 30.12.2009, 17:55
Волгоградец вне форума Посмотреть профиль Отправить личное сообщение для Волгоградец Найти все сообщения от Волгоградец
  № 9  
Ответить с цитированием
Волгоградец
 
Аватар для Волгоградец

блогер
Регистрация: Sep 2007
Адрес: Гамбург
Сообщений: 1,648
Записей в блоге: 12
Да ладно. Силин же написал, что Main и stage не связаны. Не будет так работать, надо добавлять child1 в Main. Или добавить в stage и событие тогда повесить на stage.

Старый 30.12.2009, 18:03
dimarik вне форума Посмотреть профиль Отправить личное сообщение для dimarik Найти все сообщения от dimarik
  № 10  
Ответить с цитированием
dimarik
.
 
Аватар для dimarik

модератор форума
Регистрация: Sep 2003
Адрес: Москва
Сообщений: 4,630
Записей в блоге: 20
Main есть ребенок stage
__________________
Воспитан в TimeZero. Работаю в Mail.ru.

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

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

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


 


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


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