トップページ > 記事閲覧
特定領域内でのクリックについて
名前:taraba 日時: 2016/12/23 10:42

初めまして、先日DXライブラリでゲームを作りはじめました 特定の領域で左クリックをするとポップアップメニューが表示されるという実装をしたいのですが 領域外(下記プログラムの画面右半分黒い部分)でクリックすると、意図しない動きを見せるのです クリック時点でポップアップが表示されることはないのですが、そのあとカーソルを領域内まで移動すると 先程クリックした領域外の位置にポップアップの描画が起こります ifで、カーソルが画面左半分にあるときしかGetMouseInputLog関数を受け付けないようにしているはずなのですが 右半分でクリックしたとき、その座標が記憶されてしまっているのは何故でしょうか まだプログラミング自体未熟なもので、初歩的なミスだとしたらすみません……よろしくお願いします 以下、コードです #include "DxLib.h" #define SCREEN_PIXWIDTH 640 #define SCREEN_PIXHEIGHT 480 #define POPUP_X 96 #define POPUP_Y 64 int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { ChangeWindowMode(TRUE); if (DxLib_Init() == -1) { return -1; } SetDrawScreen(DX_SCREEN_BACK); int clickX, clickY; bool draw_flag = 0; // ここからループ -------------------------------------------------------------------------------------- while (1) { if (ProcessMessage() != 0) { break; } ClearDrawScreen(); // 計算処理 ------------------------------------------------------------------------------------ int mouseX, mouseY, button; GetMousePoint(&mouseX, &mouseY); if (mouseX < SCREEN_PIXWIDTH / 2) // 画面左半分にカーソルがあるときクリック可能 { int x, y; if (GetMouseInputLog(&button, &x, &y, 1) == 0) // クリックしたら内部へ { if ((button & MOUSE_INPUT_LEFT) != 0) // 左クリックだったら内部へ { clickX = x; // クリックした瞬間のマウス座標を記憶 clickY = y; draw_flag = 1; // ポップアップメニューの表示フラグ(draw_flag)を立てる } } } //描画処理 ------------------------------------------------------------------------------------ DrawBox(0, 0, SCREEN_PIXWIDTH / 2, SCREEN_PIXHEIGHT, GetColor(255, 255, 255), 1); // クリック可能エリア if (draw_flag) // draw_flagが立っていたらポップアップメニュー描画 { DrawBox(clickX, clickY, clickX + POPUP_X, clickY + POPUP_Y, GetColor(180, 180, 180), 1); } ScreenFlip(); } DxLib_End(); return 0; }
メンテ

Page: 1 |

Re: 特定領域内でのクリックについて ( No.1 )
名前:Nagerei 日時:2016/12/23 18:13

GetMouseInputLog関数はマウスのクリック「履歴」を取得する関数です。 呼び出していない間も履歴はたまっていきます。 領域内にマウスを戻した際に、領域外でクリックしたときの履歴を取得してしまう為に意図しない動作になっているのだと思います。 ご期待の動作を実行するには二つの方法があります。 1. GetMouseInputを使う方法 GetMouseInputは「現在の」マウスのボタンの状態を得る関数です。 マウスが範囲内にあるときにクリックされていたら、ポップアップを表示するというようにすると良いと思います。 2. 現在のマウスの位置ではなく、クリック時点のマウスの位置を使う方法 GetMouseInputLogの第二第三引数は、クリックした瞬間のマウス座標です。 現在のマウス座標ではなく、こちらが範囲内にあるときに、ポップアップを表示するというようにすると良いと思います。 わざわざGetMouseInputLogを使っているということは、おそらく2の方法が良いと思います。
メンテ
Re: 特定領域内でのクリックについて ( No.2 )
名前:taraba(解決) 日時:2016/12/24 15:19

なるほど、GetMouseInputLogを呼び出さなくても履歴は記録されるのですね。思い違いをしていました GetMouseInputを使う方法で理想通りの動きが得られました。返答ありがとうございました!
メンテ

Page: 1 |

題名
名前
コメント
パスワード (記事メンテ時に使用)

   クッキー保存