0

私は 2 つのクラスを持っています。1 つはメインで、もう 1 つはタンク クラスとしましょう。このイベントを定義する必要がある場所は次のとおりです。

addEventListener(KeyboardEvent.KEY_DOWN, onKeyDown);
addEventListener(KeyboardEvent.KEY_UP, onKeyUp);

        private function onKeyDown(e:KeyboardEvent):void{

            trace(e.keyCode);


        }

        private function onKeyUp():void{


            trace(e.keyCode);

        }

理由はわかりませんが、この関数を定義して Tank クラスにリスナーを追加し、Main クラスの addChild(tank) に Tank オブジェクトを作成すると、そのイベントが機能しません。アドバイスをお願いします。これらのイベントをどこに配置するのがより適切で必要ですか?

4

2 に答える 2

1

ステージにリスナーを追加する必要があります。ステージは、すべての DisplayObject で Event.ADDED_TO_STAGE イベントの後に表示されるグローバル オブジェクトです。このイベントはタンク クラスまたはメインでリッスンできますが、最善の解決策は、キーボード イベントをカプセル化してどこでも使用するグローバル シングルトーン クラスを作成することです。したがって、キーボードをまったく無効にすることも、そのユーザー変更キーを実装することもできます。

public class KeyboardController extends EventDispathcer{

    public static const inst:KeyboardController  = new KeyboardController ();

    public static const STOP_TANK:String = "stopTank";

    public function init(stage:Stage):void{
        //init in you Main
        //add listeners
    }

    private function stopTankKeyHandler(event:KeyboardEvent):void{
        //who manages tank will listen thisevent:KeyboardController.inst.addEventListener(KeyboardController.STOP_TANK, someHandler);
        dispatchEvent(new Event(STOP_TANK));
    }
}
于 2012-08-15T13:27:43.640 に答える
0

ステージでそれらを定義する必要があります。

stage.addEventListener(KeyboardEvent.KEY_DOWN, onKeyDown);
stage.addEventListener(KeyboardEvent.KEY_UP, onKeyUp);
于 2012-08-15T12:57:39.737 に答える