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

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

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

Регистрация: Nov 2005
Сообщений: 148
По умолчанию Пользовательское событие для родителя

Доброго времени суток.
Решил перейти с FlashIDE на FlashDevelop, а за одно отказаться от схем с parent, только вот беда - пользовательские события. Топиков по теме куча, а ясности никакой по теме нет.
Вопрос собственно: можно ли создавать и отслеживать пользовательское событие в экземплярах классов, унаследованных не от Event или EventDispatcher? Это принципиально, т.к. хочу генерить событие из экземпляра класса Away3D, а там своё "наследие".
По сути задача такая: есть 2 класса, один в другом
Код AS3:
package {
 import flash.events.Event;
 import flash.display.Sprite;
 
 import myClassB;
 
  public class myClassA extends Sprite {
 
    var num:Number;
    var myClip:myClassB;
 
      public function myClassA ():void{
        num=0;
        myClip=new myClassB();
        addChild(myClip);
        myClip.addEventListener(Event.VALUE_CHANGED, alert); //Собственно тут хочется прослушать
      }
 
     function alert(e:Event):void{
      trace("Alert");
     }
 
 }
}
Второй класс:
Код AS3:
package {
 import flash.events.Event;
 import flash.display.Sprite
  public class myClassB extends Sprite {
   stetic var numB:Number;
     public function myClassB ():void{
       setNewNumb(1234);
     }
     public function set setNewNumb(n:Number):void {
	numB = n;
	.....dispatchEvent(new Event(Event.VALUE_CHANGED));//Тут как-то нужно генерировать событие
     }   
 
 }
}
Как-то так.
Честно говоря, это не первая попытка освоить события, но единой картины нет, не могу сложить в кучу что к чему. Кстати сказать, обилие вопросов на эту тему свидетельствует, что схема работы событий не понятна очень многим.
Спасибо.


Последний раз редактировалось zerAlex2; 23.12.2013 в 05:54.
Старый 23.12.2013, 09:29
bifidokk вне форума Посмотреть профиль Отправить личное сообщение для bifidokk Найти все сообщения от bifidokk
  № 2  
Ответить с цитированием
bifidokk
 
Аватар для bifidokk

Регистрация: Jan 2011
Сообщений: 200
Можно завести в классе экземпляр EventDispatcher и работать уже с ним, тогда не придется наследоваться от Event и EventDispatcher или их детей

Старый 23.12.2013, 09:39
caseyryan вне форума Посмотреть профиль Отправить личное сообщение для caseyryan Найти все сообщения от caseyryan
  № 3  
Ответить с цитированием
caseyryan
 
Аватар для caseyryan

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
Ну, вообще-то Sprite уже унаследован от EventDispatcher, поэтому проблемы я тут никакой не вижу.
Смотрите документацию -> цепочки наследования классов, если что-то не ясно.

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

блогер
Регистрация: Mar 2003
Адрес: Моск. обл.
Сообщений: 5,269
Записей в блоге: 6
для экземплярах классов, унаследованных не от EventDispatcher придется иметь 'на борту' класса свой eventDispatcher и вещать с его помощью, т.е. методы EventDispatcher должны быть продублированы в классе с переадресацией к этому eventDispatcher, типа
Код AS3:
package
{
	import flash.events.Event;
	import flash.events.EventDispatcher;
	import flash.events.IEventDispatcher;
 
	public class NewClass implements IEventDispatcher
	{
		private var myDispatcher:EventDispatcher
 
		public function NewClass()
		{
			myDispatcher = new EventDispatcher(this);
		}
 
		public function addEventListener(type:String, listener:Function, useCapture:Boolean = false, priority:int = 0, useWeakReference:Boolean = false):void
		{
			myDispatcher.addEventListener(type, listener, useCapture, priority, useWeakReference);
		}
 
		public function removeEventListener(type:String, listener:Function, useCapture:Boolean = false):void
		{
			myDispatcher.removeEventListener(type, listener, useCapture);
		}
 
		public function dispatchEvent(event:Event):Boolean
		{
			myDispatcher.dispatchEvent(event)
		}
		// и т.д.
 
	}
 
}
для вашего же примера, этого не надо потому как Sprite наследует EventDispatcher
вы просто пытаетесь слушать до того как подписались на рассылку
Код AS3:
package
{
	import flash.events.Event;
	import flash.display.Sprite
 
	public class myClassB extends Sprite
	{
		static public var numB:Number;
 
		public function myClassB():void
		{
			setNewNumb(1234);// здесь не выйдет послушать, слушатель еще не добавлен
		}
 
		public function setNewNumb(n:Number):void
		{
 
			numB = n;
			dispatchEvent(new Event(Event.CHANGE)); 
		}
 
	}
}
Код AS3:
package
 
{
	import flash.events.Event;
	import flash.display.Sprite;
 
	import myClassB;
 
	public class myClassA extends Sprite
	{
 
		private var myClip:myClassB;
 
		public function myClassA():void
		{
			myClip = new myClassB(); // еще не слушаем
			addChild(myClip);
			myClip.addEventListener(Event.CHANGE, alert); //Собственно тут хочется прослушать
 
			myClip.setNewNumb(444); // теперь слушаем
		}
 
		private function alert(e:Event):void
		{
			trace("Alert, num: ", myClassB.numB);
		}
 
	}
}

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

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

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


 


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


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