2011-08-14 16 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

IEventDispatcherはうまく動作します。なぜそれはあなたの意見では実現不可能なのですか? – Bakapii

+1

それから、私はしないトリックを知っているか、カスタムIEventDispatcherのイベントのターゲットをまだ使用する必要はありません。 AS3 Signalsの作成者である[Robert Penner](http://flashblog.robertpenner.com/2009/09/my-critique-of-as3-events-part-2.html)によると、外部からイベントのターゲットを設定します。これは、EventDispatcherクラス自体でのみ行うことができます。 –

+0

もちろん、IEventDispatcher'を実装することもできます。[EventDispatcher'の呼び出しをプロキシする](http://active.tutsplus.com/tutorials/actionscript/as3-101-quick-tip-dispatching-events-without-extending -eventdispatcher /)。これは、 'EventDispatcher' *を拡張しないクラスを拡張する必要がある場合に役立ちます(Adobeが実際にイベントを本格的な言語機能にしたはずの別の理由...) –

関連する問題