次は領域内でのボタン判定を説明します。
前回のプログラムを改良して使いましょう。
※フォントは使わないのでフォント関係のプログラムは表示していません。
では、まず「Draw関数」から変えていきます。
フラグがfalseの時はカードの「裏」を表示し、trueの時は表を表示するように変更してみます。
//============================================================================= // シーンの実行時に繰り返し呼び出される描画処理関数 //============================================================================= void SceneGame::Draw() { //背景の転送 SetRect(&m_sour, 0, 1568, 640, 2048); SetRect(&m_dest, 0, 0, 640, 480); m_pEngine->Blt(&m_dest, TEXTURE_TRUMP, &m_sour); //カードの転送 if (m_bInside) { SetRect(&m_sour, (m_number - 1) * 100, m_suit * 150, (m_number - 1) * 100 + 100, m_suit * 150 + 150); SetRect(&m_dest, m_x, m_y, m_x + 100, m_y + 150); m_pEngine->Blt(&m_dest, TEXTURE_TRUMP, &m_sour); } else { SetRect(&m_sour, 0, 600, 100, 750); SetRect(&m_dest, m_x, m_y, m_x + 100, m_y + 150); m_pEngine->Blt(&m_dest, TEXTURE_TRUMP, &m_sour); } } |
トランプの元画像をみると「裏」の座標が分かります。
フラグがtrueの時はカードの「表」を表示し、falseの時は「裏」を表示するようにしました。
実行してみてください。
<実行結果 クライアント領域のみ>
領域外
領域内
次に「Update関数」を変更します。
//============================================================================= // シーンの実行時に繰り返し呼び出される更新処理関数 //============================================================================= void SceneGame::Update() { m_point = m_pEngine->GetMousePosition(); if (m_pEngine->GetMouseButtonSync(DIK_LBUTTON)) { if (m_point.x >= 270 && m_point.x < 370 && m_point.y >= 165 && m_point.y < 315) { m_bInside = true; } } } |
マウスの左ボタンを押した時に、マウスポインタが領域内に入っていればフラグをtrueにします。
これも実行画面では分かりにくいので載せませんが、マウスの左ボタンを押した時にカードが表に変わります。
これらのプログラムを組み合わせる事で、ゲームを作る事が出来ると思います。
次回からは簡単なゲームを作ってみましょう。