2011-08-14 125 views
2

出於某種原因,我不能添加事件偵聽器..我已經搜索了錯誤,但人們說這是由於有一個函數外的addEventListener。不過我的是在構造函數裏面!調用可能未定義的方法addEventListener

package { 
import flash.events.*; 

public class keyClass { 
    var keyArray:Array = new Array ; 

    public function keyClass() { 
     for (var i = 0; i < 999; i++) { 
      keyArray[i] = false; 
     } 
     addEventListener(KeyboardEvent.KEY_DOWN,onKyDwn); 
     addEventListener(KeyboardEvent.KEY_UP,onKyUp); 
    } 
    public function onKyDwn(e:KeyboardEvent) { 
     keyArray[e.keyCode] = true; 
    } 
    public function onKyUp(e:KeyboardEvent) { 
     keyArray[e.keyCode] = false; 
    } 
} 

} 

回答

1

這是因爲addEventListener是類EventDispatcher,你必須擴展使用它的功能。

所以,你的情況,你的類定義更改爲:

public class keyClass extends EventDispatcher { 

另外,不要費心尋找到IEventDispatcher接口。由於未知的原因,它已經無法實現。獲得本地事件功能的唯一方法是擴展EventDispatcher

+0

Uhm,IEventDispatcher對我來說工作得很好。爲什麼你的觀點不能實現? – Bakapii

+1

然後,要麼你知道一個我不知道的技巧,或者你不必使用自定義IEventDispatcher事件的目標。根據[Robert Penner](http://flashblog.robertpenner.com/2009/09/my-critique-of-as3-events-part-2.html),AS3 Signals的創建者,不可能從外部設置事件的目標。它只能由EventDispatcher類本身完成。 –

+0

當然你可以實現'IEventDispatcher',只是[代理調用'EventDispatcher'](http://active.tutsplus.com/tutorials/actionscript/as3-101-quick-tip-dispatching-events-without-extending -eventdispatcher /)。如果你需要擴展一個不會擴展'EventDispatcher'的類,這是很有幫助的(Adobe另外一個原因應該是讓事件成爲一個完整的語言特性......)* –

相關問題