#4
by あたっしゅ » 2年前
東上☆海美☆「
singleton 化してみたみみ。
コード:
//
// https://dixq.net/forum/viewtopic.php?f=3&t=21299
// DXライブラリにおけるマウス入力機能 - ミクプラ(ja)
//
// for Visual Studio 2022 Preview on Windows11 Insider Preview
//
//
//#pragma once
#include<cstdlib>
#include<DxLib.h>
template <typename _T>
class Singleton {
protected:
Singleton() = default;
virtual ~Singleton() = default;
Singleton(const Singleton& r) = default;
Singleton& operator=(const Singleton& r) = default;
public:
static _T* getIns() {
static _T inst;
return &inst;
};
};
class MouseInput final: public Singleton<MouseInput>
{
static int curX, curY;
static int prevCurX, prevCurY;
static int wheel_cnt;
static int leftState, leftPrevState;
static int rightState, rightPrevState;
MouseInput();
~MouseInput() = default;
public:
static MouseInput* getIns() {
static MouseInput inst;
return &inst;
};
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>
int MouseInput::curX, MouseInput::curY;
int MouseInput::prevCurX, MouseInput::prevCurY;
int MouseInput::wheel_cnt;
int MouseInput::leftState, MouseInput::leftPrevState;
int MouseInput::rightState, MouseInput::rightPrevState;
MouseInput::MouseInput()
{
leftState = 0, leftPrevState = 0;
rightState = 0, rightPrevState = 0;
curX = 0, curY = 0;
prevCurX = curX, prevCurY = curY;
}
#if 0
MouseInput::~MouseInput()
{
}
#endif
int MouseInput::GetStateMouse()
{
#if 0
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;
}
#else
prevCurX = curX, prevCurY = curY;
leftPrevState = leftState;
rightPrevState = rightState;
if (GetMousePoint(&curX, &curY) == -1)
{
return -1;
}
if (GetMouseInput() & MOUSE_INPUT_LEFT)
{
leftState++;
}
else
{
leftState = 0;
}
if (GetMouseInput() & MOUSE_INPUT_RIGHT)
{
rightState++;
}
else
{
rightState = 0;
}
#endif
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) try
{
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)
{
//マウスの状態を取得
MouseInput::getIns()->GetStateMouse();
//マウスの左を押した瞬間
if (MouseInput::getIns()->GetPress(MOUSE_INPUT_LEFT))
{
DrawString(0, 0, "Press", GetColor(255, 255, 255));
}
if (MouseInput::getIns()->GetHold(MOUSE_INPUT_LEFT))
{
DrawString(0, 16, "Hold", GetColor(255, 255, 255));
}
if (MouseInput::getIns()->GetRelease(MOUSE_INPUT_LEFT))
{
DrawString(0, 32, "Release", GetColor(255, 255, 255));
}
ScreenFlip();
}
DxLib_End();
return EXIT_SUCCESS;
}
catch (...)
{
exit( EXIT_FAILURE );
}
// end.
」
東上☆海美☆「
singleton 化してみたみみ。
[code]
//
// https://dixq.net/forum/viewtopic.php?f=3&t=21299
// DXライブラリにおけるマウス入力機能 - ミクプラ(ja)
//
// for Visual Studio 2022 Preview on Windows11 Insider Preview
//
//
//#pragma once
#include<cstdlib>
#include<DxLib.h>
template <typename _T>
class Singleton {
protected:
Singleton() = default;
virtual ~Singleton() = default;
Singleton(const Singleton& r) = default;
Singleton& operator=(const Singleton& r) = default;
public:
static _T* getIns() {
static _T inst;
return &inst;
};
};
class MouseInput final: public Singleton<MouseInput>
{
static int curX, curY;
static int prevCurX, prevCurY;
static int wheel_cnt;
static int leftState, leftPrevState;
static int rightState, rightPrevState;
MouseInput();
~MouseInput() = default;
public:
static MouseInput* getIns() {
static MouseInput inst;
return &inst;
};
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>
int MouseInput::curX, MouseInput::curY;
int MouseInput::prevCurX, MouseInput::prevCurY;
int MouseInput::wheel_cnt;
int MouseInput::leftState, MouseInput::leftPrevState;
int MouseInput::rightState, MouseInput::rightPrevState;
MouseInput::MouseInput()
{
leftState = 0, leftPrevState = 0;
rightState = 0, rightPrevState = 0;
curX = 0, curY = 0;
prevCurX = curX, prevCurY = curY;
}
#if 0
MouseInput::~MouseInput()
{
}
#endif
int MouseInput::GetStateMouse()
{
#if 0
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;
}
#else
prevCurX = curX, prevCurY = curY;
leftPrevState = leftState;
rightPrevState = rightState;
if (GetMousePoint(&curX, &curY) == -1)
{
return -1;
}
if (GetMouseInput() & MOUSE_INPUT_LEFT)
{
leftState++;
}
else
{
leftState = 0;
}
if (GetMouseInput() & MOUSE_INPUT_RIGHT)
{
rightState++;
}
else
{
rightState = 0;
}
#endif
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) try
{
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)
{
//マウスの状態を取得
MouseInput::getIns()->GetStateMouse();
//マウスの左を押した瞬間
if (MouseInput::getIns()->GetPress(MOUSE_INPUT_LEFT))
{
DrawString(0, 0, "Press", GetColor(255, 255, 255));
}
if (MouseInput::getIns()->GetHold(MOUSE_INPUT_LEFT))
{
DrawString(0, 16, "Hold", GetColor(255, 255, 255));
}
if (MouseInput::getIns()->GetRelease(MOUSE_INPUT_LEFT))
{
DrawString(0, 32, "Release", GetColor(255, 255, 255));
}
ScreenFlip();
}
DxLib_End();
return EXIT_SUCCESS;
}
catch (...)
{
exit( EXIT_FAILURE );
}
// end.
[/code]
」