Input类细节调整
This commit is contained in:
parent
fb95734a88
commit
284db32f6d
|
|
@ -3,27 +3,19 @@
|
|||
#include "..\e2dmanager.h"
|
||||
#pragma comment(lib, "dinput8.lib")
|
||||
|
||||
#define BUFFER_SIZE 256
|
||||
|
||||
static char s_KeyBuffer[BUFFER_SIZE] = { 0 }; // 用于保存键盘按键信息缓冲区
|
||||
static char s_KeyRecordBuffer[BUFFER_SIZE] = { 0 }; // 键盘消息二级缓冲区
|
||||
|
||||
e2d::Input * e2d::Input::_instance = nullptr;
|
||||
|
||||
e2d::Input::Input()
|
||||
: _directInput(false)
|
||||
, _keyboardDevice(false)
|
||||
, _mouseDevice(false)
|
||||
, _mouseState()
|
||||
, _mouseStateRecord()
|
||||
, _mousePos()
|
||||
{
|
||||
CoInitialize(nullptr);
|
||||
|
||||
ZeroMemory(s_KeyBuffer, sizeof(s_KeyBuffer));
|
||||
ZeroMemory(s_KeyRecordBuffer, sizeof(s_KeyRecordBuffer));
|
||||
ZeroMemory(_keyBuffer, sizeof(_keyBuffer));
|
||||
ZeroMemory(_keyRecordBuffer, sizeof(_keyRecordBuffer));
|
||||
ZeroMemory(&_mouseState, sizeof(_mouseState));
|
||||
ZeroMemory(&_mouseStateRecord, sizeof(_mouseStateRecord));
|
||||
ZeroMemory(&_mouseRecordState, sizeof(_mouseRecordState));
|
||||
|
||||
// ³õʼ»¯½Ó¿Ú¶ÔÏó
|
||||
HRESULT hr = DirectInput8Create(
|
||||
|
|
@ -124,10 +116,8 @@ void e2d::Input::update()
|
|||
}
|
||||
else
|
||||
{
|
||||
for (int i = 0; i < BUFFER_SIZE; ++i)
|
||||
s_KeyRecordBuffer[i] = s_KeyBuffer[i];
|
||||
|
||||
_keyboardDevice->GetDeviceState(sizeof(s_KeyBuffer), (void**)&s_KeyBuffer);
|
||||
strcpy_s(_keyRecordBuffer, 256, _keyBuffer);
|
||||
_keyboardDevice->GetDeviceState(sizeof(_keyBuffer), (void**)&_keyBuffer);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -142,34 +132,31 @@ void e2d::Input::update()
|
|||
}
|
||||
else
|
||||
{
|
||||
_mouseStateRecord = _mouseState;
|
||||
_mouseRecordState = _mouseState;
|
||||
_mouseDevice->GetDeviceState(sizeof(_mouseState), (void**)&_mouseState);
|
||||
}
|
||||
}
|
||||
|
||||
GetCursorPos(&_mousePos);
|
||||
ScreenToClient(Window::getInstance()->getHWnd(), &_mousePos);
|
||||
}
|
||||
|
||||
bool e2d::Input::isDown(KeyCode key)
|
||||
{
|
||||
if (s_KeyBuffer[static_cast<int>(key)] & 0x80)
|
||||
if (_keyBuffer[static_cast<int>(key)] & 0x80)
|
||||
return true;
|
||||
return false;
|
||||
}
|
||||
|
||||
bool e2d::Input::isPress(KeyCode key)
|
||||
{
|
||||
if ((s_KeyBuffer[static_cast<int>(key)] & 0x80) &&
|
||||
!(s_KeyRecordBuffer[static_cast<int>(key)] & 0x80))
|
||||
if ((_keyBuffer[static_cast<int>(key)] & 0x80) &&
|
||||
!(_keyRecordBuffer[static_cast<int>(key)] & 0x80))
|
||||
return true;
|
||||
return false;
|
||||
}
|
||||
|
||||
bool e2d::Input::isRelease(KeyCode key)
|
||||
{
|
||||
if (!(s_KeyBuffer[static_cast<int>(key)] & 0x80) &&
|
||||
(s_KeyRecordBuffer[static_cast<int>(key)] & 0x80))
|
||||
if (!(_keyBuffer[static_cast<int>(key)] & 0x80) &&
|
||||
(_keyRecordBuffer[static_cast<int>(key)] & 0x80))
|
||||
return true;
|
||||
return false;
|
||||
}
|
||||
|
|
@ -184,7 +171,7 @@ bool e2d::Input::isDown(MouseCode code)
|
|||
bool e2d::Input::isPress(MouseCode code)
|
||||
{
|
||||
if ((_mouseState.rgbButtons[static_cast<int>(code)] & 0x80) &&
|
||||
!(_mouseStateRecord.rgbButtons[static_cast<int>(code)] & 0x80))
|
||||
!(_mouseRecordState.rgbButtons[static_cast<int>(code)] & 0x80))
|
||||
return true;
|
||||
return false;
|
||||
}
|
||||
|
|
@ -192,24 +179,27 @@ bool e2d::Input::isPress(MouseCode code)
|
|||
bool e2d::Input::isRelease(MouseCode code)
|
||||
{
|
||||
if (!(_mouseState.rgbButtons[static_cast<int>(code)] & 0x80) &&
|
||||
(_mouseStateRecord.rgbButtons[static_cast<int>(code)] & 0x80))
|
||||
(_mouseRecordState.rgbButtons[static_cast<int>(code)] & 0x80))
|
||||
return true;
|
||||
return false;
|
||||
}
|
||||
|
||||
double e2d::Input::getMouseX()
|
||||
{
|
||||
return (double)_mousePos.x;
|
||||
return getMousePos().x;
|
||||
}
|
||||
|
||||
double e2d::Input::getMouseY()
|
||||
{
|
||||
return (double)_mousePos.y;
|
||||
return getMousePos().y;
|
||||
}
|
||||
|
||||
e2d::Point e2d::Input::getMousePos()
|
||||
{
|
||||
return Point((double)_mousePos.x, (double)_mousePos.y);
|
||||
POINT mousePos;
|
||||
GetCursorPos(&mousePos);
|
||||
ScreenToClient(Window::getInstance()->getHWnd(), &mousePos);
|
||||
return Point((double)mousePos.x, (double)mousePos.y);
|
||||
}
|
||||
|
||||
double e2d::Input::getMouseDeltaX()
|
||||
|
|
|
|||
|
|
@ -294,12 +294,13 @@ private:
|
|||
E2D_DISABLE_COPY(Input);
|
||||
|
||||
private:
|
||||
IDirectInput8* _directInput;
|
||||
IDirectInputDevice8* _keyboardDevice;
|
||||
IDirectInputDevice8* _mouseDevice;
|
||||
IDirectInput8W* _directInput;
|
||||
IDirectInputDevice8W* _keyboardDevice;
|
||||
IDirectInputDevice8W* _mouseDevice;
|
||||
DIMOUSESTATE _mouseState;
|
||||
DIMOUSESTATE _mouseStateRecord;
|
||||
POINT _mousePos;
|
||||
DIMOUSESTATE _mouseRecordState;
|
||||
char _keyBuffer[256];
|
||||
char _keyRecordBuffer[256];
|
||||
|
||||
static Input * _instance;
|
||||
};
|
||||
|
|
@ -395,8 +396,6 @@ private:
|
|||
// 垃圾回收器
|
||||
class GC
|
||||
{
|
||||
friend class Game;
|
||||
|
||||
public:
|
||||
// 自动释放
|
||||
static void autorelease(
|
||||
|
|
|
|||
Loading…
Reference in New Issue