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

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

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

Регистрация: Oct 2005
Адрес: Russia, Irkutsk
Сообщений: 742
По умолчанию Не ловится событие

Есть класс который наследуется от спрайта, является чилдом stage и подписывается на событие у stage
Код:
public class Panel extends Sprite
{
	public function Panel()
	{
		this.addEventListener(Event.ADDED_TO_STAGE, onAdded);
	}

	private function onAdded(e:Event):void
	{		
		stage.addEventListener(PanelEvent.PANEL_EVENT, addText);
        	...
	}
...
}
в некотором мувике который глубоко по иерархии по нажатию кнопки создается экземпляр класса который стреляет событием

Код:
hit.addEventListener(MouseEvent.CLICK, playClick);

private function playClick(e:MouseEvent):void
{
	new PanelEvent("hello world!");
}
собсна сам PanelEvent

Код:
...
public class PanelEvent extends EventDispatcher 
{
	public static const PANEL_EVENT:String = "PanelEvent";
	public var str:String;
	
	public function PanelEvent(text:String)
	{
		str = text;
		dispatchEvent(new Event(PanelEvent.PANEL_EVENT, true));
	}
}
если в мувике с экземпляром класса события написать так
Код:
private function playClick(e:MouseEvent):void
{
        //new PanelEvent("hello world!");
	dispatchEvent(new Event(PanelEvent.PANEL_EVENT, true));
}
то всё работает. почему так происходит?
__________________
smival.com

Старый 10.09.2008, 12:05
wvxvw вне форума Посмотреть профиль Отправить личное сообщение для wvxvw Найти все сообщения от wvxvw
  № 2  
Ответить с цитированием
wvxvw
Modus ponens
 
Аватар для wvxvw

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
Помоему всплывающие события доступны только наследникам DisplayObject...
__________________
Hell is the possibility of sanity

Старый 10.09.2008, 12:08
mre вне форума Посмотреть профиль Отправить личное сообщение для mre Посетить домашнюю страницу mre Найти все сообщения от mre
  № 3  
Ответить с цитированием
mre
 
Аватар для mre

Регистрация: Jul 2007
Адрес: Москва
Сообщений: 996
PanelEvent нужно наследовать от Event а не от EventDispatcher.
И диспатчить событие все равно придется в DisplayObject, который находится в DisplayList.


Последний раз редактировалось mre; 10.09.2008 в 12:33.
Старый 10.09.2008, 12:42
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 4  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,787
Константа PANEL_EVENT при таком имени должна содержать значение "panelEvent". А вообще, подобное название событие ни о чём не говорит разработчику. «Событие панели». Какое событие? Клик? Перемещение? Никакой информации, совершенно.
Имена событий в Flash Player не от балды написаны, они конкретно описывают происходящее событие. Ваше же — не описывает.

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

Регистрация: Oct 2005
Адрес: Russia, Irkutsk
Сообщений: 742
Цитата:
Сообщение от mre Посмотреть сообщение
PanelEvent нужно наследовать от Event а не от EventDispatcher.
Вы не правы, как бы я тогда использовал dispatchEvent()?

Цитата:
Сообщение от mre Посмотреть сообщение
И диспатчить событие все равно придется в DisplayObject, который находится в DisplayList.
действительно
__________________
smival.com

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

Регистрация: Sep 2002
Сообщений: 30,787
Цитата:
Сообщение от $mival Посмотреть сообщение
Вы не правы, как бы я тогда использовал dispatchEvent()?
А причем тут сам Event и метод dispatchEvent у EventDispatcher?

Старый 11.09.2008, 10:13
$mival вне форума Посмотреть профиль Отправить личное сообщение для $mival Найти все сообщения от $mival
  № 7  
Ответить с цитированием
$mival
 
Аватар для $mival

Регистрация: Oct 2005
Адрес: Russia, Irkutsk
Сообщений: 742
Цитата:
Сообщение от __etc Посмотреть сообщение
А вообще, подобное название событие ни о чём не говорит разработчику. «Событие панели». Какое событие? Клик? Перемещение? Никакой информации, совершенно.
Имена событий в Flash Player не от балды написаны, они конкретно описывают происходящее событие. Ваше же — не описывает.
Эта панель ловит только одно событие, так будет всегда.
Именно поэтому оно было названо так.
Или "правила хорошего тона" не позволяют халтурить и в таких случаях?

Цитата:
Сообщение от __etc Посмотреть сообщение
А причем тут сам Event и метод dispatchEvent у EventDispatcher?
Ну товарищ mre посоветовал наследоваться от Event,
это мне надо было бы потом создавать внутри класса диспатчер,
отправлять событие, удалять диспатчер.
В чем преимущество наследования от Event а не от EventDispatcher в этом случае?
__________________
smival.com

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

Регистрация: Sep 2002
Сообщений: 30,787
Цитата:
Сообщение от $mival Посмотреть сообщение
Или "правила хорошего тона" не позволяют халтурить и в таких случаях?
Халтурить вообще нельзя.

Цитата:
Сообщение от $mival Посмотреть сообщение
В чем преимущество наследования от Event а не от EventDispatcher в этом случае?
Боже мой, Event — это событие, а EventDispatcher — тот, кто их рассылает. EventDispatcher не рассылает EventDispatcher-ы, а вы пытаетесь так сделать, непонятно, на каком основании.

Старый 11.09.2008, 10:28
$mival вне форума Посмотреть профиль Отправить личное сообщение для $mival Найти все сообщения от $mival
  № 9  
Ответить с цитированием
$mival
 
Аватар для $mival

Регистрация: Oct 2005
Адрес: Russia, Irkutsk
Сообщений: 742
Цитата:
Сообщение от __etc Посмотреть сообщение
Боже мой, Event — это событие, а EventDispatcher — тот, кто их рассылает. EventDispatcher не рассылает EventDispatcher-ы, а вы пытаетесь так сделать, непонятно, на каком основании.
разве я не Event отсылаю?

Код:
dispatchEvent(new Event(PanelEvent.PANEL_EVENT, true));
можете посоветовать как надо на коде?
__________________
smival.com


Последний раз редактировалось $mival; 11.09.2008 в 10:30.
Старый 11.09.2008, 10:35
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 10  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,787
Цитата:
Сообщение от $mival Посмотреть сообщение
разве я не Event отсылаю?
Отсылаете вы Event, конечно, поэтому ваш код работает. А должны рассылать new PanelEvent(PanelEvent.PANEL_EVENT, true) как минимум.

Цитата:
Сообщение от $mival Посмотреть сообщение
можете посоветовать как надо на коде?
Надо открыть документацию по событийной модели ActionScript и всё-всё там прочитать и понять.

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

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

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


 


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


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