Flex / AS3でフラッシュアプリケーションを作成していますが、キーボードフォーカスを割り当てることができないようです。私は開発の早い段階でこの問題に気を配り、ユーザーにクリックを促すために「今すぐ再生」ボタン付きのスプラッシュ画面を追加しました。ただし、キーボードを機能させるには、ユーザーはアプリケーションをもう一度クリックする必要があります。
さらに悪いことに、メインメニューに戻るゲーム内ショートカットがあります。メインメニューに戻って[今すぐ再生]ボタンをクリックすると、SWFは再びフォーカスを失います。
おそらく、子オブジェクトを台無しにしたり、キーボードのフォーカスをキャプチャしたオブジェクトを誤って破壊したりしていますが、それがどのように機能するかはよくわかりません。私を正しい方向に向けるのを手伝ってもらえますか?
私のアプリケーションは単一の.SWFファイルであり、ブラウザーで直接実行しています(Webページ経由ではなく、最終的には呼び出します)。問題のファイルは次のとおりです。
http://www.space-squid.com/game/Main.swf [通常]をクリックすると、キーボードのフォーカスを実際に取得するためにもう一度クリックする必要があります。:(お気軽に質問してください!
編集:これが私が使用しているいくつかのコードです。
私のプライマリクラスで実行される最初のコードのいくつか:
empty_sprite = new Sprite();
addChild(empty_sprite);
empty_sprite.stage.addEventListener(keyboard hooks...);
ルートオブジェクトにフックを設定する必要がある場合に備えて、これも試しました。
this.stage.addEventListener(keyboard hooks...);
空のスプライトが問題を引き起こしていた場合:
background_image = new BackgroundImage();
background_image.x = etc etc alignment data;
addChild(background_image);
background_image.stage.addEventListener(keyboard hooks...)
これらのすべての例で、2回目にクリックする限り、キーボードフックは正常に機能しますが、1回目はクリックしません。:(
2番目の編集:問題を絞り込みました。おそらく誰かが私がこれを正すのを手伝ってくれるでしょう、それはおそらく構造の問題です:
public function Main {
Some stuff...
empty_sprite = new Sprite(); // Create a new stage sprite
addChild(empty_sprite);
empty_sprite.stage.addEventListener(keyboard hooks...);
addChild(BackgroundImage); // I lay down my background image which is persistant
addChild(PlayNowButton); // I display my PlayNow button to the screen
More stuff...
}
public function StartGame() {
removeChild(PlayNowButton); // This is the point of failure; this removes focus.
removeChild(otherMenuOptions);
...
addChild(gameComponents);
}
ご覧のとおり、[今すぐ再生]ボタンを作成すると、フォーカスの対象になるように見えます。フォーカスを探しているのは背景であるため、キーボードイベントがトラップされていません。それが理にかなっているかどうかはわかりませんが、うまくいけば、誰かがこれで私をまっすぐにすることができます!
その1行(removeChild(PlayNowButton))をコメントアウトすると、ゲームは完全に正常に動作し、キーボードのフォーカスを維持します。「playnow」ボタンが画面に永久にオーバーレイされるという欠点があります。
正直なところ、ゲーム自体が最初のクリックに焦点を合わせているかどうかさえわかりませんが、それをテストする方法はわかりません。