将AS3 dispatchEvent转换为AS2

时间:2013-09-01 18:56:01

标签: actionscript-3 actionscript-2

我有一个处理其他文件(小游戏)的as3文件。所有文件都是AS3,除了一个AS2,它对我来说太大了,无法将其重写为AS3。 在AS3中,我使用:

dispatchEvent(new Event("ending", true));

游戏结束时。 我需要在AS2文件中发送“结束”,所以我的AS3主文件可以做到这一点。 有人可以将此行从as3转换为as2吗?

1 个答案:

答案 0 :(得分:1)

事件模型只是与事件类型(字符串)相关的一堆回调。 EventDispatcher维护此关联,并在其触发特定事件时迭代回调。

重建自己非常简单,在你的情况下,你可以大大简化它。

以下是AS2中可能是简单EventDispatcher的示例:

function EventDispatcher():Object
{
    var listeners:Object = { };

    return {

        addEventListener: function(type:String, callback:Function)
        {
            listeners[type] = callback;
        },

        dispatchEvent: function(type:String)
        {
            for(var i:String in listeners)
            {
                if(i === type) listeners[i]();
            }
        }

    };
}

及其实施:

// Create the event dispatcher.
var eventDispatcher:Object = EventDispatcher();

// Add an event listener as with AS3.
eventDispatcher.addEventListener("ending", endGame);

// Define the handler function.
function endGame():Void
{
    trace("Game has ended.");
}

// Dispatch an event.
eventDispatcher.dispatchEvent("ending");

如果你想让它更接近AS3事件模型,你需要在dispatchEvent循环中创建一个'Event'对象并将其传递给处理程序,如下所示:

dispatchEvent: function(type)
{
    for(var i:String in listeners)
    {
        var event:Object = { type: i, target: this };
        if(i === type) listeners[i](event);
    }
}