次はマウスのボタンが押されたかどうかを判定する方法について説明します。
プログラムは前回の続きに書きます。
マウスのボタン判定用の関数は↓の2つが用意されています。
GetMouseButton関数 GetMouseButtonSync関数
どちらも引数として「ボタン定数」を渡します。
ボタンの定数は、
DIK_LBUTTON 左ボタン DIK_RBUTTON 右ボタン DIK_MBUTTON 中央ボタン
の3つが用意されています。
2つの関数の違いを理解するために、プログラムを変更してみます。
「SceneGame.cpp」を開いてください。
「Update関数」を↓のように変更しましょう。
//============================================================================= // シーンの実行時に繰り返し呼び出される更新処理関数 //============================================================================= void SceneGame::Update() { if (m_pEngine->GetMouseButton(DIK_LBUTTON)) { m_point = m_pEngine->GetMousePosition(); } } |
マウスの左ボタンが押された場合のみ座標を取得するよう変更しました。
ただし、m_pointの初期値が不定のため、ボタンが押されないと訳の分からない座標が表示されてしまいます。
これに対応するため「Start関数」に次のコードを追加します。
//============================================================================= // シーンの実行時に1度だけ呼び出される開始処理関数 //============================================================================= void SceneGame::Start() { m_pEngine->AddFont(FONT_GOTHIC, 20); m_point.x = 0; m_point.y = 0; } |
実行してみましょう。
<実行結果 クライアント領域のみ>
左ボタンを押すと、押した場所の座標が表示されます。
左ボタンを押したままマウスを動かしてみてください。
移動するにつれて座標も変化してきます。
では、関数を変えてみましょう。
「Update関数」を↓のように変更してください。
//============================================================================= // シーンの実行時に繰り返し呼び出される更新処理関数 //============================================================================= void SceneGame::Update() { if (m_pEngine->GetMouseButtonSync(DIK_LBUTTON)) { m_point = m_pEngine->GetMousePosition(); } } |
実際に実行してみます。
<実行結果 クライアント領域のみ>
こちらの関数でも、左ボタンを押した場所の座標が表示されます。
しかし、押したまま動かしても座標は変わりません。
この2つの関数の違いとは、
GetMouseButton関数 ボタンを押している間、常にtrueを返し続ける。 |
GetMouseButtonSync関数 ボタンを押した時に1度だけtrueを返し、ボタンを離さなければtrueを返さない。 |
と言う事になります。
キーボードのキーもジョイスティックのボタンも同じような関数を持っていますので、状況に応じて使い分けるようにしましょう。