Flash AS3沟通独立课程的最佳方式?

时间:2009-07-28 00:29:46

标签: actionscript-3 event-handling

在独立类之间进行通信的最简单方法是什么? 我一直在寻找两天,一无所获, 是不是有一种方法,一个类有一个dispatchEvent,另一个有一个addEventListener,有一个自定义事件?我只能在同一个班级中找到与父母关系的解决方案,但我正在寻找的就像一个“兄弟”的关系可以这么说 感谢

3 个答案:

答案 0 :(得分:2)

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

在调度班中:

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对这个概念有了很好的介绍。

答案 1 :(得分:0)

因此,如果您有ChildClass1,ChildClass2和ParentClass,其中ChildClass1和ChildClass2都是ParenClass的子级。

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

答案 2 :(得分:0)

如果您没有ParentClass,您还可以使用注册Childs的ChildManagerClass并相应地通知它们。