2013-09-01 2 views
2

У меня есть один файл as3, который обрабатывает другие файлы (маленькие игры). Все файлы являются AS3, за исключением AS2, и это слишком большое для меня, чтобы переписать его в AS3. В AS3 я использую:перевод AS3 dispatchEvent в AS2

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

, когда игра закончена. Мне нужно отправить «окончание» в файл AS2, поэтому мой основной файл AS3 может сделать это волшебство. Может ли кто-то перевести эту строку с as3 на as2?

+0

http://stackoverflow.com/questions/877871/can-an-as2-swf-be-loaded-into-an-as3-swf-how-can-i-add-this-to-the-stage-and -в – Pier

ответ

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 и передать его обработчику примерно так:

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