2019/12/12에 해당하는 글 1

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

댓글()