UDN
Search public documentation:

GFxSplitScreenJP
English Translation
中国翻译
한국어

Interested in the Unreal Engine?
Visit the Unreal Technology site.

Looking for jobs and company info?
Check out the Epic games site.

Questions about support via UDN?
Contact the UDN Staff

UE3 ホーム > ユーザーインターフェイスと HUD > 「Scaleform GFx」 > 分割スクリーンを扱う方法

分割スクリーンを扱う方法


概要


GFx 3.3 にフォーカスグループと分割スクリーンの拡張機能が導入されました。最終的には動画チュートリアルをリリースすることになりますが、当面は、以下の情報が役立つはずです。

この新たなフォーカスグループ拡張機能によって、分割スクリーンおよびオフラインのマルチプレイヤーのために、単一のムービーインスタンスを使用することができるようになりました。GFx 3.3 によって、最大 16 個のフォーカスグループを作成することが可能になるとともに、特定のコントローラをフォーカスグループにマッピングするインターフェイスが使用できるようになります。デフォルトでは、すべてのコントローラがフォーカスグループ 0 に属しています。

Selection.setControllerFocusGroup を使用することによって、コントローラを新たなフォーカスグループにアサインすることが可能となります。

また、GFx 3.3 には、フォーカスグループのマスキングという概念が導入されました。これは、focusGroupMask と呼ばれる新たな拡張機能を使用するものです。フォーカスグループ マスクは、16 ビットの値 (0000 0000 0000 0000) です。各ビットは、そのインデックスにおけるフォーカスグループを表しています。たとえば、bit 0 はフォーカスグループ 0 を表し、bit 1 はフォーカスグループ 1 、bit 2 はフォーカスグループ 2 (以下同様) を表します。bit 0 は、一番右側にあるビットであり、bit 15 は一番左側のビットです。 MovieClip.focusGroupMask 拡張機能を使用することによって、ビットを 0 から 1 に反転させるだけで、ムービークリップがどのフォーカスグループに属しているかを示すことができるようになります。

コントローラをフォーカスグループにアサインする


次の最初の部分では、player 1 (第 1 のコントローラ) がフォーカスグループ 1 にセットされています。コントローラはすべて 0 から数えられるため、第 1 のコントローラは、実際には controller 1 ではなく、controller 0 となることに注意すべきです。その次に、player 2 のコントローラが focus group 1 にセットされています。

// Set up two focus groups

Selection.setControllerFocusGroup(0, 0);   // controller id 0 set to focus group 0
Selection.setControllerFocusGroup(1, 1);   // controller id 1 set to focus group 1

初期ムービークリップのフォーカスをセットする


以下の最初の例では、myMovieClip1 のフォーカスが十進値の 1 にセットされるように設定されています。この値は、二進値の 0001 に相当し、フォーカスグループ 0 を表しています。この例では、CLIK 特有の方法が取られています。

2 番目の例では、一般的な方法が取られています。(Selection.setFocus)。一般的な方法を使う場合は、フォーカスグループ マスクを使用する代わりに、第 2 のパラメータとしてコントローラのインデックスを使用します。player 2 のコントローラのインデックスは 1 です。

//Set initial focus

myMovieClip1.myButton1.focused = 1; // 0x1 - clik specific
Selection.setFocus( myMovieClip2.myButton1, 1 ); // non clik specific (generic)

ムービークリップをフォーカスグループにロックする


ここで、各ムービークリップとその子を、特定のフォーカスグループにロックします。つまり、そのフォーカスグループに属するコントローラだけが、そのムービークリップにアクセスできるようになります。

// Lock each movie clip to a specific focus group using a decimal value

panel1s.focusGroupMask = 1; // hex 0x1 - binary 0001
panel2s.focusGroupMask = 2; // hex 0x2 - binary 0010

フォーカスグループに割り当てられていないムービークリップは、どれも、いかなるコントローラでもアクセスすることが可能です。さらに、focusGroupMask を使用してムービークリップに複数のコントローラがアクセスすることさえ可能です。

player 1 のコントローラと player 2 のコントローラの両方が所定のムービークリップにアクセスできるようになるビットマップマスクの十進値がいくつになるかを計算します。 controller 0 がアクセスできるようにするためには、bit 0 を 1 に反転する必要があります。また、controller 1 がアクセスできるようにするためには、bit 1 を 0 に反転する必要があります。これによって、二進値は 0011 となります。この二進値を十進値に変換すると 3 になります。

二進から十進を算出できない場合は、ウェブベースのフリーのコンバーターが多数あります。

以上の結果より、myMovieClip.focusGroupMask = 3 にセットすることになります。これによって、controller 1 と controller 2 の両方がアクセスすることができます。

フォーカス インジケータ グラフィック


これは、ボタンおよびボタンに類するコンポーネント (例 : チェックボックス、ラジオボタン) のために CLIK によってサポートされています。デフォルトでは、すべてのフォーカスグループが以前と同じように同一のグラフィック インジケータを使用します。コンポーネント内部では、タイムライン上に focusIndicator レイヤーがあります。フォーカス インジケータは、focusIndicator というインスタンス名をもったムービークリップです。

focusIndicator をドリルダウンしてみましょう。内部には一連のキーフレームがあるはずです。第 1 のフレームから始まって、ステージ上にはグラフィックがないはずです。このフレームは、state0 というラベルがアサインされる必要があります。このフレームはフォーカスを表しません。換言すれば、プレイヤーがコントローラを使用してこのコンポーネントを選択していないならば、このフレームが表示されることになります。タイムライン上を右に 1 フレーム移動すると、次のキーフレームには state1 というラベルが付いているはずです。このキーフレームには、player 1 のコントローラ (すなわち controller 0) を表すグラフィックが必要です。また、これは、player 1 が自身のコントローラを使ってコンポーネントを選択したことを表すために使用されるフレームとなります。ラベルの state1 に含まれている 1 は、(controller 0 がアサインされている) focus group 0 のためのビットマスク十進値を表しています。

もう 1 つフレームを移動すると、次のキーフレームには、player 2 のコントローラ (すなわち、controller 1) のためのグラフィックがあるはずです。そして、このフレームのラベルは state2 です。ここで理解すべきことは、各フレームには stateN というラベルが付けられなければならないということです。この場合、N は、フォーカスグループのビットマスクの適切な十進値に置き換えられなければなりません。もちろん、各フレーム上には、ActionScript 停止コマンドが必要です。

次のフレームは、state3 というラベルが付されていることでしょう。これには、player 1 と player 2 の両方のコントローラのためのグラフィックがあるはずです。ところで、3 という十進値は、0011 という二進値に変換されるのでした。つまり、bit 0 および bit 1 が、on (すなわち 1 ) に反転されていることになります。これによって、state3 のフレームは、player 1 と player 2 のコントローラの両方がそのコンポーネントでフォーカスされる場合のフォーカスを表します。特定の UI エレメントが扱うべきコントローラ フォーカスのあらゆる可能な組み合わせのために、キーフレームを作成しておく必要があります。tate4 や state5、state6 などのためのキーフレームを追加することによって、それぞれが、UI エレメントにフォーカスするさまざまなコントローラおよびコントローラの組み合わせを表すことができます。