Microsoft DirectX 8.0 (Visual Basic) |
次に、各ゲーム アクションを、1 つの仮想コントロールまたはデバイス オブジェクトに割り当てる。これらのコントロールはアクション マッピング定数として定義され、ジャンルおよびサブジャンルによって定義される。ActionMapper サンプルでは、フライト ゲーム ジャンルの宇宙戦サブジャンルを選択するのが適切である。このサブジャンルでは、以下の定数を使用できる。
優先順位 1 のコントロール
DIAXIS_SPACESIM_LATERAL
DIAXIS_SPACESIM_MOVE
DIAXIS_SPACESIM_THROTTLE
DIBUTTON_SPACESIM_FIRE
DIBUTTON_SPACESIM_MENU
DIBUTTON_SPACESIM_TARGET
DIBUTTON_SPACESIM_WEAPONS
優先順位 2 のコントロール
DIAXIS_SPACESIM_CLIMB
DIAXIS_SPACESIM_ROTATE
DIBUTTON_SPACESIM_BACKWARD_LINK
DIBUTTON_SPACESIM_DEVICE DIBUTTON_SPACESIM_DISPLAY
DIBUTTON_SPACESIM_FASTER_LINK
DIBUTTON_SPACESIM_FIRESECONDARY
DIBUTTON_SPACESIM_FORWARD_LINK
DIBUTTON_SPACESIM_GEAR
DIBUTTON_SPACESIM_GLANCE_DOWN_LINK
DIBUTTON_SPACESIM_GLANCE_LEFT_LINK
DIBUTTON_SPACESIM_GLANCE_RIGHT_LINK
DIBUTTON_SPACESIM_GLANCE_UP_LINK
DIBUTTON_SPACESIM_LEFT_LINK DIBUTTON_SPACESIM_LOWER
DIBUTTON_SPACESIM_PAUSE DIBUTTON_SPACESIM_RAISE
DIBUTTON_SPACESIM_RIGHT_LINK
DIBUTTON_SPACESIM_SLOWER_LINK
DIBUTTON_SPACESIM_TURN_LEFT_LINK
DIBUTTON_SPACESIM_TURN_RIGHT_LINK
DIBUTTON_SPACESIM_VIEW
DIHATSWITCH_SPACESIM_GLANCE
優先順位 1 のコントロールは最低限必要なコントロールで、できるだけデバイス オブジェトにマッピングする必要がある。優先順位 2 のコントロールは、基本的なゲーム操作にはそれほど重要ではなく、必要に応じてマッピングできる。
ゲーム アクションは、DIACTION 型の配列にあるアクション マッピング定数コントロールに割り当てられる。各 DIACTION 型は、最低 1 つのゲーム アクションと、それに関連するアクション マッピング定数、必要なフラグ、そして、アクションのわかりやすい名前を格納する。残りの DIACTION メンバは、この時点では使用しない。次のサンプル コードは、ActionMapper サンプルに定義されている DIACTION 型の配列を示す。CInputMapper は、ActionMapper サンプルが使用して定義するクラスであり、多くの標準アクション マッピング プロシージャを格納する。この例では、独自の AddAction 関数を使って、DIACTIONFORMAT 型に格納されている配列に新しい DIACTION 型を追加する。
Dim m_mapper As New CInputMapper With m_mapper .AddAction INPUT_LEFTRIGHT_AXIS, DIAXIS_SPACESIM_LATERAL, 0, "Turn" .AddAction INPUT_UPDOWN_AXIS, DIAXIS_SPACESIM_MOVE, 0, "Move" .AddAction INPUT_FIREWEAPONS, DIBUTTON_SPACESIM_FIRE, 0, "Shoot" .AddAction INPUT_ENABLESHIELD, DIBUTTON_SPACESIM_GEAR, 0, "Shield" .AddAction INPUT_DISPLAYGAMEMENU,DIBUTTON_SPACESIM_DISPLAY,0,"Display" .AddAction INPUT_QUITGAME, DIBUTTON_SPACESIM_MENU, 0, "Quit Game" ' キーボード入力マッピング。 .AddAction INPUT_FORWARDTHRUST, DIKEYBOARD_UP, 0, "Forward thrust" .AddAction INPUT_REVERSETHRUST, DIKEYBOARD_DOWN, 0, "Reverse thrust" .AddAction INPUT_FIREWEAPONS, DIKEYBOARD_F, 0, "Fire weapons" .AddAction INPUT_ENABLESHIELD, DIKEYBOARD_S, 0, "Enable shields" .AddAction INPUT_DISPLAYGAMEMENU, DIKEYBOARD_D, 0, "Display game menu" .AddAction INPUT_QUITGAME, DIKEYBOARD_ESCAPE, 0, "Quit game" .AddAction INPUT_TURNRIGHT, DIKEYBOARD_RIGHT, 0, "Right Turn" .AddAction INPUT_TURNLEFT, DIKEYBOARD_LEFT, 0, "Left Turn" ' マウス入力マッピング。 .AddAction INPUT_LEFTRIGHT_AXIS, DIMOUSE_XAXIS, 0, "Turn" .AddAction INPUT_UPDOWN_AXIS, DIMOUSE_YAXIS, 0, "Move" .AddAction INPUT_FIREWEAPONS, DIMOUSE_BUTTON0, 0, "Fire weapons" .AddAction INPUT_ENABLESHIELD, DIMOUSE_BUTTON1, 0, "Enable shields" End With
DIACTION 型の配列を格納する DIACTIONFORMAT 型を使って、そのアクションを使用するのに最適なデバイスを探し出す。これについては、「ステップ 3 : デバイスへのアクションのマッピング」で説明する。