初めまして、先日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;
}