![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|
|
|||||
|
Регистрация: Nov 2005
Сообщений: 148
|
Доброго времени суток.
Решил перейти с FlashIDE на FlashDevelop, а за одно отказаться от схем с parent, только вот беда - пользовательские события. Топиков по теме куча, а ясности никакой по теме нет. Вопрос собственно: можно ли создавать и отслеживать пользовательское событие в экземплярах классов, унаследованных не от Event или EventDispatcher? Это принципиально, т.к. хочу генерить событие из экземпляра класса Away3D, а там своё "наследие". По сути задача такая: есть 2 класса, один в другом 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"); } } } 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. |
|
|||||
|
Регистрация: Jan 2011
Сообщений: 200
|
Можно завести в классе экземпляр EventDispatcher и работать уже с ним, тогда не придется наследоваться от Event и EventDispatcher или их детей
|
|
|||||
|
для экземплярах классов, унаследованных не от EventDispatcher придется иметь 'на борту' класса свой eventDispatcher и вещать с его помощью, т.е. методы EventDispatcher должны быть продублированы в классе с переадресацией к этому eventDispatcher, типа
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) } // и т.д. } } вы просто пытаетесь слушать до того как подписались на рассылку 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)); } } } 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. |
|
|
« Предыдущая тема | Следующая тема » |
|
|