Console Project/6. 키 입력
C++2019. 12. 12. 17:47
키의 입력은 GetAsyncKeyState()함수를 통해 감지한다. 이 함수로는 단순히 키가 눌렸는지 아닌지만 체크하는 용도로 사용할 것이다.
// Input.h
class GameEngine;
class Input
{
private:
static bool currentStates[256];
static bool prevStates[256];
static void BeginUpdate();
friend GameEngine;
public:
static bool IsKeyDownOnce(int keyCode);
static bool IsKeyDown(int keyCode);
static bool IsKeyUpOnce(int keyCode);
};
// Input.cpp
bool Input::currentStates[256];
bool Input::prevStates[256];
void Input::BeginUpdate()
{
for (int i = 0; i < 256; i++) {
prevStates[i] = currentStates[i];
currentStates[i] = GetAsyncKeyState(i) & 0x8000;
}
}
bool Input::IsKeyDownOnce(int keyCode)
{
return currentStates[keyCode] && !prevStates[keyCode];
}
bool Input::IsKeyDown(int keyCode)
{
return currentStates[keyCode];
}
bool Input::IsKeyUpOnce(int keyCode)
{
return !currentStates[keyCode] && prevStates[keyCode];
}
사용방법
키 입력을 체크하기 전에 BeginUpdate함수를 호출하여야 한다.
void Game::Update(float deltaTime)
{
Input::BeginUpdate();
if (Input::IsKeyDownOnce(VK_LEFT)) {
this->dir = 1;
this->pos.x -= 16;
}
else if (Input::IsKeyDownOnce(VK_RIGHT)) {
this->dir = 2;
this->pos.x += 16;
}
}
GetAsyncKeyState를 그대로 사용하므로 함수의 파라메터-키 코드는 https://docs.microsoft.com/en-us/windows/win32/inputdev/virtual-key-codes링크 참조.
'C++' 카테고리의 다른 글
JSON for Modern C++ (0) | 2019.12.14 |
---|---|
Console Project/7. TileMap (0) | 2019.12.14 |
Console Project/5. 문자 출력 (0) | 2019.12.10 |
Console Project/4.5 중간보고 (0) | 2019.12.10 |
Console Project/4. GameLoop (0) | 2019.12.10 |
댓글()