0

FlashDevelopを使用して、キーボードイベントを検出するためのコードを少し入手しました。問題は、このコードをメインクラス(Main.as)から実行するとイベントがトリガーされますが、別のクラスに移動した場合はトリガーされないことです。

たとえば、私はメインクラスを持っています、そしてそれはこの機能を持っています

addEventListener(KeyboardEvent.KEY_DOWN,onKeyDown);
public function onKeyDown(e:KeyboardEvent):void
{
    trace(e.keyCode);
    if (gameState == 1){main.onKeyDown(e);}
}

さて、これはファーストクラスでうまく機能します。しかし、それを2番目のクラスであるMainMenu.asに送信しても、何も起こりません。

        main = new MainMenu();
        addChild(main);
        gameState = 1;

どちらのクラスからもメッセージはありません。イベントを2番目のクラスに入れても、何も起こりません。キーボードイベント以外の他のすべてのイベントは引き続き機能します。

4

1 に答える 1

2

キーボードイベントは、フォーカスのあるMovieClips(およびその親)にのみ転送されます。例外なくすべてのイベントをキャプチャする場合は、ステージに追加します(すべての親であるため、常にイベントを受信します)stage.addEventListener(KeyboardEvent.KEY_DOWN,onKeyDown);。クラスが終了したら、イベントを削除することを忘れないでください(それ自体は削除されません)。

もう1つの可能性は、ステージのフォーカスを特定のクラスに強制するstage.focus = this;ことです。ただし、可能であれば、これは避けます。

于 2011-11-21T05:47:14.313 に答える