2

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

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

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

4

1 回答 1

1

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

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

EventDispatcher这是一个在 AS2中可能很简单的示例:

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循环中创建一个“事件”对象并将其传递给处理程序,如下所示:

dispatchEvent: function(type)
{
    for(var i:String in listeners)
    {
        var event:Object = { type: i, target: this };
        if(i === type) listeners[i](event);
    }
}
于 2013-09-01T22:45:15.703 回答