フルスクリーン時のキーイベント処理

全くおかしい話だ・・。

AIRアプリでも作ろうかと思って、どうせならフルスクリーンだろ、とフルスクリーンで作業していたらキーボードイベントが取れないのですよ。あれこれ試しつつ状況を整理すると下記のようになる。

  • StageDisplayState.FULL_SCREEN でフルスクリーンにした。
  • 通常動作するはずのキーボードイベント(KeyboardEvent.*)が発生しない。
  • 全く同じ状態でもマウスイベント(MouseEvent.MOUSE_MOVE等)は取れる。
  • ESCキーを押してフルスクリーンを解除したら、さっきまで取れなかったイベントが取れる。

なんじゃこりゃー!!!!ということでググってみて分かった驚愕の事実。
「フルスクリーンモードでは(フルスクリーンモードを抜けるショートカット以外の)キーボードイベントは取得できません」

While Flash Player is in full-screen mode, all keyboard input is disabled (except keyboard shortcuts that take the user out of full-screen mode).

http://livedocs.adobe.com/flash/9.0/ActionScriptLangRefV3/flash/display/Stage.html#displayState

AIRならOKでした

しかし、よく読むと文章はこう続く。

These restrictions are not present for SWF content running in the stand-alone Flash Player or in AIR . AIR supports an interactive full-screen mode which allows keyboard input.

http://livedocs.adobe.com/flash/9.0/ActionScriptLangRefV3/flash/display/Stage.html#displayState

AIRならキーボード入力が可能なインタラクティブフルスクリーンモードがサポートされている、ということなのだ!
もう一度ヘルプ等を漁ると、次のように説明されたページが見つかった。

FULL_SCREEN_INTERACTIVE 定数
public static const FULL_SCREEN_INTERACTIVE:String = "fullScreenInteractive"

ステージがフルスクリーンモードで、ユーザーによる操作が有効であることを指定します。 AIR アプリケーションだけが、この機能をサポートしています。

http://livedocs.adobe.com/flex/3_jp/langref/flash/display/StageDisplayState.html#FULL_SCREEN_INTERACTIVE

つまり、最初に書いた項目のうち、一つ目を次のように修正すればフルスクリーンのAIRアプリでキーボードイベントが取得できるのです。

  • StageDisplayState.FULL_SCREEN_INTERACTIVE でフルスクリーンにした。

なぜ二つのモードを用意するのか、理解に苦しむ。