내 머릿속 데이터베이스

대각선 이동 본문

Game issues

대각선 이동

파도소리 2009. 5. 17. 14:12


WM_TIMER 에서

GetKeyState(int nVirtKey) 함수를 이용하여 대각선 이동을 할 수 있다.
이 함수는 0x8000과 & 연산을 해서 결과값이 0이면 키가 눌려진것으로 간주한다.

간단한 사용예) 프로시져 부분

static POINT ptMove; //또는 전역변수, 맴버변수로
HDC hdc;
PAINTSTRUCT pt;

switch(iMessage){

WM_CREATE :
    ptMove.x = 100;
    ptMove.y = 100;
    return 0;
WM_ACTIVATEAPP :
    /////////// 폴링 ///////////
    if(wParam)
        SetTimer(hWnd, 0, 50, NULL);
    else
        KillTimer(hWnd, 0);
    ///////////////////////////
    return 0;
WM_TIMER :
    if(GetKeyState(VK_LEFT) & 0x8000)
        ptMove.x -= 5;
    if(GetKeyState(VK_RIGHT & 0x8000)
        ptMove.x += 5;
    if(GetKeyState(VK_UP & 0x8000)
        ptMove.y -= 5;
    if(GetKeyState(VK_DOWN & 0x8000)
        ptMove.y += 5;
    InvalidateRect(hWnd, NULL, TRUE);
    return 0;
WM_PAINT :
    hdc=BeginPaint(hwnd, &ps);
    TextOut(hdc, ptMove.x, ptMove.y, TEXT("&"), 1);
    EndPaint(hWnd, &ps);
    return 0;
WM_DESTROY :
    KillTimer(hWnd, 0);
    PostQuitMessage(0);
    return 0;

}

※ 폴링이란? 
    입력 메시지를 받지 않고 자신이 원할 때 정보를 입력 받는 방식
[출처] [Win32 API] 대각선 이동법(두개 이상의 키를 이용)|작성자 dods87

 

Comments