2009-05-24 2 views
5

フォーラムの投稿とチュートリアルを通して多くの読書をしましたが、私はまだ脳のラウンドイベントとイベントリスナーをラップできません。私はかなり簡単な例がありますが、それを動作させることはできません。as3でカスタムイベントリスナを追加する

リピーターにカスタムオブジェクトのarrayCollectionがあります。そのオブジェクトの1つがクリックされたときに、そのオブジェクトに関連付けられたデータを表示する別のコンポーネントが必要です。

これは私が持っているものですが、リスナーは応答しません(ディスパッチャは動作しているようですが、新しいイベントが作成され、正しい出力でトレースが表示されるためです)。リスナー、私は間違った物にそうしています。私の理解は、オブジェクトデータを表示するオブジェクトは、イベントリスナーを持つべきオブジェクトであり、この性質のすべてのイベントを待ち受けますが、誤解されている可能性があります。

マイカスタムイベント:

public class SelectObjectEvent extends Event 
    { 
     public function SelectObjectEvent(customEventString:String, myObject:customObject) 
     { 
       super(customEventString, true, false); 
       trace(customEventString+" "+myObject); 
     } 
    } 
} 

マイカスタムオブジェクトクリックで呼び出され、次の機能があります。

public function selectObject(myObject:customObject):void 
     { 
      dispatchEvent(new SelectObjectEvent("OBJECT_SELECTED", customObject));    
     } 

そして、私は、選択したオブジェクトを表示するコンポーネントを次のコンストラクタがあります。

public function SelectedObjectDisplayClass() 
     { 
      addEventListener("OBJECT_SELECTED", this.showObject) 
     } 

     public function showObject(event:Event):void 
      { 
      trace("Show object: "+event); 
     } 

答えて

3

最後の2つのコードチャンクがどこにあるかはっきりしませんeが、EventDispatcherを拡張するオブジェクトにaddEventListenerを呼び出す必要があるように見えます。 2番目のチャンクがEventDispatcherを拡張し、クリックされたとき、その後、あなたのコンポーネントがmyClickableがクリッカブルのインスタンスであるmyClickable.addEventListener(...)を呼び出すべきであるdispatchEvent()呼び出すClickableと呼ばれるカスタムオブジェクトに属している場合、ある

。それは理にかなっていますか?

しかし、3番目のコードチャンクが2番目のコードチャンクと同じクラスではないとすれば、それはやっているようには見えません。コードの3番目のチャンクを所有するクラスにリスナーを追加していますが、これはEventDispatcherを拡張するものではありません。

+0

まあ...はい、第二のチャンクがイベントを送出するオブジェクトに属しているが、それはクリックできない、そしてそれは私の知る限りのEventDispatcher拡張していません(それはUIComponentを拡張します。)それはですListコンポーネントに座っているゲームオブジェクトです。リスト内のそのオブジェクトが選択されると、そのイベントが送出されます。イベントをディスパッチするすべてのオブジェクトは、EventDispatcherを拡張する必要がありますか? – Martholomew

+0

多分私の問題は、リストは、引数に選択されたオブジェクトで、イベントをディスパッチする必要がありますか? – Martholomew

+1

さて、DisplayObjectはEventDispatcherを拡張しているので、あなたがステージ上に持っているものも同様です。私はイベントを誰が派遣すべきか分かりません。誰がそうするべきかを知っている人はいますが、それはあなたのコードに当てはまります。明確なのは、Aがイベントをディスパッチし、Bがそれを受け取った場合、あなたのコールはsomeA.addEventListener(eventType、someB.method)である必要があるということです。今はBさんにイベントリスナーを追加しているようです。 – fenomas

0

コードをすばやく見て、dispatchEventの2番目のパラメータがオブジェクトのインスタンスではないクラスであることに注意してください。これはmyObjectではないはずですか?

public function selectObject(myObject:customObject):void 
     { 
       dispatchEvent(new SelectObjectEvent("OBJECT_SELECTED", **customObject**));       
     } 
関連する問題