0

常にフルスクリーンでロックする必要があるキオスクのようなアプリケーション (ゲーム) を開発しています。as3/flash/AIR を使用しています。物事は最初は順調に始まり、ほとんどすべてうまくいきました..しかし、私が理解できなかった謎がどこかに醸造されています...それはあなたの助けが大いに感謝されるところです!

この問題を処理する方法は、アプリの最初に追加することです。

stage.addEventListener(KeyboardEvent.KEY_DOWN, playerOnKeyDown);

次に、私の playerOnKeyDown 関数で:

function playerOnKeyDown(event:KeyboardEvent):void
{
    if (event.keyCode == Keyboard.ESCAPE)
    {
        event.preventDefault();
        //More code here opening out menus, etc, etc.)
    }
}

したがって、これらはすべて問題なく機能しましたが、もちろん、次のものも用意する必要がありました。

stage.focus = stage;

そうしないと、オブジェクトを削除するときに (removeChild() のように)、フラッシュが表示リストの別の場所にフォーカスを変更したため、イベントの発生が思い通りに動作しませんでした。

「子」を削除するたびにステージにフォーカスを追加するように注意してきましたが、外部からロードされた SWF からオブジェクトを削除した直後の実行全体で 1 回を除いて、どこでもうまく機能します。

動作すると予想されるため、次の行を追加します。

removeChild(childFromLoadedSWF);
stage.focus = stage;

ただし、任意のキーを押してもイベントは関数をトリガーせず、ESC キーを押すと全画面表示 (デフォルトの動作) から抜け出し、リスナー関数 playerOnKeyDown を完全に回避します。

奇妙なことに、これを行う直前に次の行があります。

stage.hasEventListener(KeyboardEvent.KEY_DOWN))

トレースは本当です!

フォーカスはステージにあり、リスナーはオンですが、ESC キーを押すと、デフォルトの動作は私の機能を完全に無視します....

何が原因でしょうか?

ありがとうございました!!

4

1 に答える 1

0

私が持っていた ENTER_FRAME リスナーを削除する必要があったようです。それはstage.focusに大混乱をもたらしていました。今、すべてがうまくいきます!

stage.removeEventListener(Event.ENTER_FRAME, onEnterFrame)

AS3 を使用して Mac または PC (Steam など) 向けのデスクトップ ゲームを開発しようと考えている人にとって、これは素晴らしいことです。

Flash で作成されたにもかかわらず、ESC キーがこの効果を引き起こすことは決してないため、ゲームのマシナリウムはこのようなことを行ったに違いありません。

于 2013-09-16T02:55:31.083 に答える