2012-03-08 5 views

答えて

2

イベントリスナーは、EventDispatcherの下位クラスに属するオブジェクトにアタッチされます。それらを関数に割り当てることはできません。

0

あなたは単にあなたが、このようなイベントを送出し、それを聞くために、ステージを使用することができ、引数

function cb(s:String):void { 
    trace(s); 
} 

function doit(f:Function):void { 
    // do something 
    f("Hi"); 
    // do some more stuff 
} 

doit(cb); 
3

と関数参照(コールバック)を渡すことによって、これを達成することができます

stage.addEventListener("myFunctionWasCalled", callback); 
myFunction(); 

public function callback(event:Event):void { 
    trace("callback executed"); 
} 

public function myFunction():void { 
    stage.dispatchEvent(new Event("myFunctionWasCalled")); 
} 
0

場合必要に応じて関数呼び出しを追加したり削除したりするだけで、関数呼び出しの生涯でイベントを待ち受けるだけです。 例:

function somefunction():void{ 
    someobject.addEventListener(Event, eventhandler); 
    ... doing stuff 
    someobject.removeEventListener(Event, eventhandler); 
} 

さても、フローのあなたの選択は、道路を追跡することが非常に困難になることがありますが、これを行う場合に注意してください。

典型的なことは、オブジェクトの生死には本当に心配する必要がありますが、関数呼び出しの生死は対称です。

0

オブジェクトにイベントリスナーをアタッチするには、このオブジェクトにIEventDispatcherインターフェイスを実装する必要があります。だからFunctionクラスを拡張し、あなたのメソッドを追加することができます。 AS3のドキュメントがFunctionが最終ではないことを言うが、AS3のコンパイルがそれに同意しない:VerifyError: Error #1103: Class Bla cannot extend final base class.

ので、短い答えは:あなたが機能にイベントリスナーをアタッチすることはできません。

しかし、それはすでにあなたは可能性が言及されたよう:

  1. パスコールバック/いくつかの点で呼び出される関数へのコールバック:function bla(callback1:Function, callback2:Function):void
  2. 関数実行中に他のオブジェクトからイベントを送出します。たとえば、のメソッドを持つFunctorクラスを作成し、IEventDispatcherを実装することができます。このようにして、関数myFunctor.execute()を呼び出して、ディスパッチされたイベントを取得できます。
関連する問題