常にフルスクリーンでロックする必要があるキオスクのようなアプリケーション (ゲーム) を開発しています。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 キーを押すと、デフォルトの動作は私の機能を完全に無視します....
何が原因でしょうか?
ありがとうございました!!