【问题标题】:Flash AS3 Best way to communicate independent classes?Flash AS3 沟通独立课程的最佳方式?
【发布时间】:2009-07-28 00:29:46
【问题描述】:

独立类之间最简单的通信方式是什么? 找了两天也没找到 有没有办法让一个类有一个dispatchEvent,另一个有一个addEventListener,有一个自定义事件?我只能在具有父子关系的同一个班级中找到解决方案,但我正在寻找的是一种“兄弟”关系可以这么说 谢谢

【问题讨论】:

    标签: actionscript-3 event-handling


    【解决方案1】:

    通常,您希望调度事件的类扩展EventDispatcher 或实现IEventDispatcher。 (所有DisplayObjects 都可以,所以如果你的课程是DisplayObjects,你不需要做任何额外的事情。)

    在调度类中:

    class DispatchingClass extends Event Dispatcher {
        function doSomething() {
            // do stuff
            dispatchEvent(new Event("FOO"));
        }
    }
    

    在听力课上:

    class ListeningClass {
        function startListening(dispatcher:DispatchingClass) {
            dispatcher.addEventListener("FOO", handleFoo);
        }
    
        function handleFoo(evt:Event) {
            // do stuff
        }
    }
    

    EventDispatchers 可以很好地处理自定义事件。


    如果由于某种原因您的侦听类没有并且无法获取调度类的实例,您可以创建一个全局事件广播器。基本上,创建一个普遍可访问的类,扩展EventDispatcher(或实现IEventDispatcher)并监听事件并将其分派给任何告诉它的事件。

    这是事件广播器的基本实现:

    import flash.events.EventDispatcher;
    
    public class EventBroadcaster extends EventDispatcher {
        private static var _instance:EventBroadcaster = new EventBroadcaster();
    
        public function EventBroadcaster() {
            if (_instance != null) {
                trace ("Error: an instance of EventBroadcaster() already exists.");
            }
        }
    
    
        public static function getInstance():EventBroadcaster {
            return EventBroadcaster._instance;
        }
    }
    

    你使用它的方式几乎相同:

    class DispatchingClass {
    
        function doSomething() {
            // do something
            EventBroadcaster.getInstance().dispatchEvent(new Event("FOO"));
        }   
    }
    
    class ListeningClass {
        function startListening() {
            EventBroadcaster.getInstance().addEventListener("FOO", handleFoo);  
        }
    
        function handleFoo(evt:Event) {
            // do stuff
        }
    }
    

    dispatchEvent()addEventListener() 只是内置EventDispatcher 的函数。

    Event Broadcaster - Simple events solution... 讨论了制作活动广播器的方法以及如何添加有用的功能。文章Centralized Event Management in Actionscript 2.0对这个概念有很好的介绍。

    【讨论】:

      【解决方案2】:

      所以如果你有 ChildClass1、ChildClass2 和 ParentClass,其中 ChildClass1 和 ChildClass2 都是 ParenClass 的子级。

      ChildClass1 将调度一个事件。 ParentClass 将监听此事件,然后它的处理程序将更新 ChildClass2。

      【讨论】:

        【解决方案3】:

        如果您没有 ParentClass,您也可以使用 ChildManagerClass 来注册 Childs 并相应地通知他们。

        【讨论】:

        • 是的,如果可能请解释一下,我也很感兴趣。谢谢-Katax
        猜你喜欢
        • 1970-01-01
        • 2018-05-12
        • 2011-06-04
        • 2011-05-25
        • 1970-01-01
        • 1970-01-01
        • 2018-06-26
        • 2012-03-25
        • 2015-03-07
        相关资源
        最近更新 更多