DirectInputではマウスの情報を取得することができる。
マウスはボタンの押下情報と、どの方向にどのくらい動かしてるかの情報を取得することができる。
気を付けなければならないのは「マウスカーソルの位置」を取得することはできないこと。
カーソルはWindowsが出しているものなので、マウス自体はその位置を知らない。
カーソルの位置を知るためにはWindowsAPIを使うことになる。(または自前でカーソルを作る手もある)
それ以外はキーボードの処理を理解していれば難しいことはないので、
昨年のゲームエンジンの中身を見て真似して作ってみよう。
元のゲームエンジンのマウス位置取得関数がミスってたので、そこは次のように作る。
まずInput.cppの方で、Input名前空間の中にマウスカーソルの位置を入れておく変数を用意する。
namespace Input
{
:
:
XMVECTOR mousePosition;
その変数のゲッターとセッターを作る。(Input.hでの宣言も忘れずに)
XMVECTOR GetMousePosition()
{
return mousePosition;
}
void SetMousePosition(int x, int y)
{
mousePosition = XMVectorSet((float)x, (float)y, 0, 0);
}
ウィンドウプロシージャにWM_MOUSEMOVEメッセージが来た時の処理を追加する。
LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
switch (msg)
{
case WM_MOUSEMOVE:
Input::SetMousePosition(LOWORD(lParam), HIWORD(lParam));
return 0;
case WM_DESTROY:
ウィンドウの上でマウスが移動するとWM_MOUSEMOVEメッセージが発生する。
この時、ウィンドウプロシージャの引数lParamにマウスカーソルの位置が入る。
(下位ビットにX座標、上位ビットにY座標)