게임 엔진 개발

[게임 엔진 개발] - 키보드 / 마우스 입력 처리 (Input)

LKBaekjoon 2024. 7. 1. 10:28
반응형

앞서 공부하고 정리한 내용은 무료 배포된 유튜브 "얌얌코딩"님의 강의를 시청한 후임을 밝힙니다.

LV06 Input (youtube.com)

 

얌얌코딩 (게임 개발)

어려운 게임 개발을 쉽게 배우는 방법!

www.youtube.com


WASD 방향 입력 받기


void lkb::Input::Update()
{
    for (size_t i = 0; i < mKeys.size(); i++)
    {
        // 키가 눌림
        if (GetAsyncKeyState(ASCII[i]) & 0x8000) {
            if (mKeys[i].bPressed == true) {
                mKeys[i].state = eKeyState::Pressed;
            }
            else {
                mKeys[i].state = eKeyState::Down;
            }
            mKeys[i].bPressed = true;
        }
        // 키가 안눌림
        else {
            // 이전 프레임에 눌려져 있었다. up
            if (mKeys[i].bPressed == true) {
                mKeys[i].state = eKeyState::Up;
            }
            // 이전 프레임에도 안눌려져 있었다. None
            else {
                mKeys[i].state = eKeyState::None;
            }
            mKeys[i].bPressed = false;
        }
    }

}
  • mKeys라는 배열 안에는 알파벳이 모두 들어가 있는 사용자 정의 class인 Key가 들어가 있다.
    • Key에는 boolean값과 state값, 눌린 eKeyCode 값이 들어가 있다.
  • 동시에 여러 키가 바인딩 되는 경우가 있을 수 있다 (대각선 움직임 방향 같은 경우)
    • 그런 경우를 대비해 모든 배열을 루프하며 바인딩 된 키를 찾아주어야 한다.
int ASCII[(UINT)eKeyCode::End] =
{
    'Q', 'W', 'E', 'R', 'T', 'Y', 'U', 'I', 'O', 'P',
    'A', 'S', 'D', 'F', 'G', 'H', 'J', 'K', 'L',
    'Z', 'X', 'C', 'V', 'B', 'N', 'M',
    VK_LEFT, VK_RIGHT, VK_DOWN, VK_UP
};
  • ASCII 배열을 선언하여 모든 경우의 수를 넣어준다.
  • 알파벳 키 바인딩 외에도 방향키 4개, MK_LBUTTON과 같은 마우스 좌클릭 신호들을 넣어서 확인해 줄 수 있다!
반응형