押した瞬間(Press)、押してる間(Hold)、離した瞬間(Release)の機能があり
実際に意図した動作になっているので問題ないように思えるのですが
他の人の意見を聞いてみたくてここに公開してみました。
この実装では問題があるとか、普通ならこうしたほうが良いといった事があればコメントお願いします。
MouseInput.h
#pragma once
class MouseInput
{
int curX, curY;
int prevCurX, prevCurY;
int wheel_cnt;
int leftState,leftPrevState;
int rightState,rightPrevState;
public:
MouseInput();
~MouseInput();
int GetStateMouse();
int getX();
int getY();
int getMoveX();
int getMoveY();
int GetPress(int Code);
int GetHold(int Code);
int GetRelease(int Code);
};
#include"MouseInput.h"
#include<DxLib.h>
MouseInput::MouseInput()
{
leftState = 0,leftPrevState = 0;
rightState = 0,rightPrevState = 0;
curX = 0, curY = 0;
prevCurX = curX, prevCurY = curY;
}
MouseInput::~MouseInput()
{
}
int MouseInput::GetStateMouse()
{
prevCurX = curX, prevCurY = curY;
GetMousePoint(&curX, &curY);
if (GetMouseInput() & MOUSE_INPUT_LEFT)
{
leftPrevState = leftState;
leftState++;
}
else
{
leftPrevState = leftState;
leftState = 0;
}
if (GetMouseInput() & MOUSE_INPUT_RIGHT)
{
rightPrevState = rightState;
rightState++;
}
else
{
rightPrevState = rightState;
rightState = 0;
}
return 0;
}
int MouseInput::getX()
{
return curX;
}
int MouseInput::getY()
{
return curY;
}
int MouseInput::getMoveX()
{
return curX - prevCurX;
}
int MouseInput::getMoveY()
{
return curY - prevCurY;
}
int MouseInput::GetHold(int Code)
{
if (Code == MOUSE_INPUT_LEFT)
{
return (leftState > 1) ? leftState : 0;
}
if (Code == MOUSE_INPUT_RIGHT)
{
return (rightState > 1) ? rightState : 0;
}
return -1;
}
int MouseInput::GetPress(int Code)
{
if (Code == MOUSE_INPUT_LEFT)
{
return (leftState == 1) ? 1 : 0;
}
if (Code == MOUSE_INPUT_RIGHT)
{
return (rightState == 1) ? 1 : 0;
}
return -1;
}
int MouseInput::GetRelease(int Code)
{
if (Code == MOUSE_INPUT_LEFT)
{
if (leftPrevState > 0 && leftState == 0)
{
return 1;
}
return 0;
}
if (Code == MOUSE_INPUT_RIGHT)
{
if (rightPrevState > 0 && rightState == 0)
{
return 1;
}
return 0;
}
return -1;
}
#include<DxLib.h>
#include"MouseInput.h"
int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
{
ChangeWindowMode(true);
if (DxLib_Init() != 0 || SetDrawScreen(DX_SCREEN_BACK) != 0)return -1;
MouseInput mouse;
while (ProcessMessage() == 0 && ClearDrawScreen() == 0 && CheckHitKey(KEY_INPUT_ESCAPE) == 0)
{
//マウスの状態を取得
mouse.GetStateMouse();
//マウスの左を押した瞬間
if (mouse.GetPress(MOUSE_INPUT_LEFT))
{
DrawString(0, 0, "Press", 0xffffff);
}
if (mouse.GetHold(MOUSE_INPUT_LEFT))
{
DrawString(0, 16, "Hold", 0xffffff);
}
if (mouse.GetRelease(MOUSE_INPUT_LEFT))
{
DrawString(0, 32, "Release", 0xffffff);
}
ScreenFlip();
}
DxLib_End();
return 0;
}