2011-06-23 15 views
1

ユーザーが左右の矢印キーをクリックしたときに検出するために、ステージにキーボードイベントリスナーを追加しようとしています。しかし、このリスナーは、ドキュメントクラスの中にインポートされるクラスファイル内から呼び出されます。したがって、私は、 "ステージ"が何を指しているのかわかりません。これをどうすれば解決できますか?flash as3 - アクセスステージのドキュメントクラス外

これは私のコードです:

ドキュメントクラス:AugmentedReality.as:PlaneVid_Carouselがステージに追加された後

package { 
    import examples.PlaneVid_Carousel; 

    public function AugmentedReality(){ 
    addChild (new PlaneVid_Carousel()) 
    } 
} 

PlaneVid_Carousel.as {

package examples { 
    import flash.display.*; 
    import flash.events.*; 

    public class PlaneVid_Carousel extends Sprite { 

     public function PlaneVid_Carousel(){ 
     stage.addEventListener(KeyboardEvent.KEY_DOWN, keyPressedDown 
     } 

     protected function keyPressedDown(e:KeyboardEvent):void { 
     //DO STUFF 
     } 

    } 

    } 
} 

答えて

2

は、キーボードのリスナーを追加します。ステージにアクセスできるようになります。

私は常にこの初期化メソッドを自分のDisplayObjectに使用します。これはFlashDevelopのDisplayObjectのデフォルトテンプレートです。

+1

@mheavens、私が言ったことを忘れてください。私はあなたのクラスが実際にスプライトであるという事実を見落としました。 @adamが言っていることはこれを行う適切な方法です。 – epologee

0

簡単な修正は、この例ではMyApp.asと呼ばれるドキュメントクラスに静的プロパティを追加することです。

public class MyApp extends Sprite { 
    public static var globalStage:Stage; 
    //... 

    public function MyApp() { 
     globalStage = stage; 
    } 
} 

あなたがインポートすることにより、どこからでも、ステージにアクセスすることができた後:あなたは、ドキュメントクラスのほとんどの例のコンストラクタことができ、時間のまともな時点でそれを設定することにより、globalStageプロパティに値を代入しますドキュメントクラスとこのスニペットを呼び出す:今ではドキュメントクラスのプロパティである必要はありません

MyApp.globalStage.addEventListener(KeyboardEvent.KEY_DOWN, handleKeyDown); 

、多分StageProxyのような専用のクラスがより明確になり、そしてあなたはまだ文書からそれを割り当てることができますクラス。

public function MyApp() { 
    StageProxy.stage = stage; 
} 

そして、どこからでもアクセス:

StageProxy.stage.addEventListener(KeyboardEvent.KEY_DOWN, handleKeyDown); 

をこれは私が「クリーン」または「かなり」と呼ぶだろうと何まだありませんが、それは仕事を取得します。

関連する問題