我有一个处理其他文件(小游戏)的as3文件。所有文件都是AS3,除了一个AS2,它对我来说太大了,无法将其重写为AS3。 在AS3中,我使用:
dispatchEvent(new Event("ending", true));
游戏结束时。 我需要在AS2文件中发送“结束”,所以我的AS3主文件可以做到这一点。 有人可以将此行从as3转换为as2吗?
答案 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);
}
}