我正在做處理類,將閱讀與此類似:什麼是可以在AS3中使用addEventListener的最基本的對象?
package avian.background
{
import flash.events.EventDispatcher;
import flash.events.Event;
import flash.utils.getTimer;
import avian.objects.AvChild;
import avian.background.AvManager;
public class AvHandler extends EventDispatcher
{
// vars
private var _last:uint = 0;
private var _time:uint = 0;
/**
* Constructor
*/
public function AvHandler()
{
addEventListener(Event.ENTER_FRAME, _handle);
_last = getTimer();
}
/**
* Called on dispatch of Event.ENTER_FRAME
*/
private function _handle(e:Event):void
{
_time = getTimer() - _last;
var i:AvChild;
for each(i in AvManager.getList("all"))
{
i.step(_time);
}
_last = getTimer();
}
}
}
的目標是有這個類擴展了最基本的可能仍然可以使addEventListener()
使用 - 由於某種原因, ENTER_FRAME甚至不會觸發 - 如果要延長,可以正常工作Sprite或MovieClip。我錯誤地認爲EventDispatcher是最基本的可能。
我最初的事件適用於我通過構造函數解析的階段 - 這看起來很不整潔。
謝謝隊友 - 看看它。 – Marty 2011-05-03 07:36:30
您是否確認實際上可以從DisplayObject擴展並實例化您的AvHandler類而不會出現運行時錯誤?我不認爲DisplayObject可以直接實例化,但我並不知道是否可以安全地實例化,只要將其向下一級進行實例化(不需要任何設置)即可。 – bigp 2011-05-04 16:33:17
它可能在DisplayObject的本機代碼中有一定程度的'abstract-detection',它可以在AS3中複製爲:if(Object(this).constructor == YourAbstractClass){//錯誤! } – bigp 2011-05-04 16:35:41