Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Зарегистрировать свой Event для Class`а (http://www.flasher.ru/forum/showthread.php?t=124016)

ERrorMAKros 18.04.2009 16:58

Зарегистрировать свой Event для Class`а
 
Подскажите пожалуйста примерчиком, как для своего объекта в классе описать event, которым бы можно было в дальнейшем пользоваться через

Код AS3:

var MyObj: MyObject = new MyObject();
MyObj.addEventListener(мое_событие_в_классе_MyObject, function_name);

Как описать функцию события в классе:
Код AS3:

package
{
public class MyObject extends MovieClip
  {
  trace('мой обжект инит');
  }
}


cleptoman 18.04.2009 17:18

dispatchEvent + хелп

ERrorMAKros 19.04.2009 14:31

Вот при разборке dispatchEvent столкнулся с такой историей:
Код AS3:

package {
        import flash.events.Event;
        import flash.display.Sprite;
 
        public class IEventDispatcherExample extends Sprite {
 
                private var mainzx:Number=50;                       
 
                public function IEventDispatcherExample() {
                  var decorDispatcher:DecoratedDispatcher = new DecoratedDispatcher();
                      decorDispatcher.addEventListener("doSomething", didSomething);
                      decorDispatcher.dispatchEvent(new Event("doSomething"));
                }
 
                public function didSomething(evt:Event):void
                                {
                      mainzx=1112;
                                          trace('OK');
                }
 
                public function aaaaaaa():Number
                                {
                                        return mainzx;
                                }
        }
}
 
import flash.events.IEventDispatcher;
import flash.events.EventDispatcher;
import flash.events.Event;
 
class DecoratedDispatcher implements IEventDispatcher {     
    private var dispatcher:EventDispatcher;
 
    public function DecoratedDispatcher() {
        dispatcher = new EventDispatcher(this);
    }
 
    public function addEventListener(type:String, listener:Function, useCapture:Boolean = false, priority:int = 0, useWeakReference:Boolean = false):void{
        dispatcher.addEventListener(type, listener, useCapture, priority);
    }
 
    public function dispatchEvent(evt:Event):Boolean{
        return dispatcher.dispatchEvent(evt);
    }
 
    public function hasEventListener(type:String):Boolean{
        return dispatcher.hasEventListener(type);
    }
 
    public function removeEventListener(type:String, listener:Function, useCapture:Boolean = false):void{
        dispatcher.removeEventListener(type, listener, useCapture);
    }
 
    public function willTrigger(type:String):Boolean {
        return dispatcher.willTrigger(type);
    }
}

И вот исполняемый код:
Код AS3:

import flash.events.Event;
import flash.display.Sprite;
var main: IEventDispatcherExample = new IEventDispatcherExample();
    main.addEventListener("doSomething",mainaaa);
 
function mainaaa(e:Event):void
{var aaaa=main.aaaaaaa();
  trace(aaaa); // ЧТО ТО ТУТ НИЧЕГО НЕ ПОКАЗЫВАЕТ?!! ПОЧЕМУ?
}


wvxvw 19.04.2009 14:57

Вы событие диспатчите в конструкторе, а подисываетесь на него после того, как вызываете конструктор.

ERrorMAKros 20.04.2009 05:22

А как правильно? ...что то не уловил логики.

wvxvw 20.04.2009 06:11

Ну вот представьте, что происходит, по времени:
  1. начали создавать объект IEventDispatcherExample.
  2. из объекта IEventDispatcherExample раздали всем подписчикам событие (на этот момент подписчиков не было, никто событие не получил).
  3. закончили создавать объект IEventDispatcherExample.
  4. подписались на событие от объекта IEventDispatcherExample, но он его уже давно раздал.

ERrorMAKros 20.04.2009 06:31

А должно происходить как? Суть в том, что мне нужно зарегистрировать "свое" событие, при вызове которого я бы мог получить определенные параметры класса, в данном случае содержимое переменной "mainzx".

wvxvw 20.04.2009 15:39

Ну, подумайте, если вы хотите съесть бутерброд, то, наверное, сначала рот откроете, а потом уже туда бутербродом, правильно? А то если сначала бутерброд, а потом рот открыть - то как-то неудобно получится :)
Смысл подписываться на событие заключается в том, что это самое событие происходит в какое-то неопределенное более позднее время. Поэтому диспатчить событие из конструктора бессмысленно - он все равно всегда вызывается только 1 раз для каждого объекта и вы всегда знаете (можете получить ссылку на этот объект сразу же после его создания - так зачем вам там нужно события диспатчить?
Если ван нужен просто пример - поставьте таймер, и по тику таймера диспачте свое событие.

cleptoman 20.04.2009 18:56

я вот смотрю код и не пойму какую мысль автор хотел донести.(

olexandr 21.04.2009 10:43

Вложений: 1
вот, посмотрите пример. думаю, после него все станет понятно )

p.s. wvxvw, твои ответы, как обычно - супер ;)


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

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