Microsoft DirectX 8.0 (Visual Basic)

アクション マップの構成

各デバイスが列挙されたら、デフォルト アクション マップの取得、デフォルト マップへの変更、および最終マッピングの適用を行うことができる。

1. デバイスの取得

列挙が完了したら、DirectInputEnumDevices8.GetItem メソッドを使って DirectInputDeviceInstance8 クラスのインスタンスを取得できる。DirectInputDeviceInstance8.GetGuidInstance でデバイス GUID を取得し、取得したデバイス GUID を DirectInput8.CreateDevice に渡すことができる。結果として得られる DirectInputDevice8 オブジェクトは、アプリケーションで使用するためにグローバル変数として保存できる。また、アクション マップを構成する前に、このオブジェクトのメソッドを使って、検証または変更したいデバイスのプロパティを取得または設定できる。

2. デフォルト アクション マップの取得

デバイスのデフォルト アクション マップを取得するには、DirectInputDevice8.BuildActionMap を呼び出す。Microsoft® DirectInput® は、DIACTIONFORMAT 型に指定された仮想コントロールのリストを取り出し、これらのコントロールを物理デバイス オブジェクトにマップしようとする。結果は同じ型に返される。それぞれの DIACTION 要素の dwHow メンバを確認して、コントロールが正常にマップされたかどうかを調べる必要がある。正常ならば、ユーザーによる構成やデバイス メーカーによる構成など、オブジェクトの選択にどのような基準が使用されたかを突き止めることもできる。

3. アクション マップへの変更

この時点で、デフォルト マッピングを変更できる。ただし、変更は推奨されない。DIACTION 型の lSemantic メンバを検証し、どのデバイス オブジェクトがアクションにマップされたかを確認したら、マップの値を変更できる。たとえば、DIJOFS_BUTTON9 にマップされているアクションを、トリガ ボタンにマップし直したい場合、アクション マップを適用する前に、この値を DIJOFS_BUTTON0 に変更する。

4. アクション マップの適用

DIACTIONFORMAT 型に含まれるデバイスのマッピングが適切であることを確認したら、DirectInputDevice8.SetActionMap を呼び出す。それぞれの DIACTION 型の uAppData メンバに割り当てた値は、この時点で、dwSemantic メンバに指定されたコントロールにバインドされる。これは次に特定のデバイス オブジェクトにバインドされる。

5. 複数デバイスのマッピング

ステップ 1 から 4 までを、アプリケーションで使用するそれぞれのデバイスに対して実行する。アクションをジョイスティックとキーボードの両方にマップするとしよう。レーシング ゲームの例で、ゲームに eB_DRIVERVIEW として定義されたアクションは、DIACTION 配列でキーボードのキーにマップされた。

その例では、キーボード以外のデバイスに対して BuildActionMap が呼び出されると、その要素の DIACTION 型の lHow メンバが DIAH_UNMAPPED に設定される。各デバイスが順に列挙されるのに従い、DIAH_UNMAPPED 以外の値が返されるまで、lHow メンバの検証を続ける。これは、現在マップされている対象のデバイスがキーボードであり、アクションが要求されたキーに正常にマップされたことを示す。

正常にマップされたアクションも、別のデバイスにマップできる。この例では、eB_UPSHIFT が 2 つの DIACTION 型に設定される。

デバイスが列挙されるのにしたがい、eB_UPSHIFT アクションは 1 つ以上のジョイスティックやその他のゲーム コントローラの適切なボタンにマップされ、次にキーボードのキーに再びマップされる。

6. 構成の表示

ユーザーにデバイスへのアクションのマップ状況を示すには、DICD_DEFAULT フラグを DirectInput8.ConfigureDevices に渡す。次の図に示すように、デバイスのマッピング図を含むプロパティ シートが、表示専用モードで表示される。イメージを表示するメカニズムの詳細については、「アクション マッピングの使い方」のチュートリアルを参照すること。

デバイス メーカーからデバイス イメージが提供されていない場合、マッピングは次の図のようにテキスト モードで表示される。

 :  Microsoft® Windows® キーは、アプリケーションの協調レベルで排他協調レベルを通して受動的に、または DISCL_NOWINKEY フラグを使って能動的に無効にする場合でも、デフォルトのアクション マッピング UI が表示されている間はアクティブになる。

プロパティ シートについての詳細情報は、「デバイスのユーザー構成」を参照すること。