본문 바로가기

[DirectX]DirectInput 사용

1.일단 프로젝트에 필요 lib 넣는다.
프로젝트속성->입력->추가 종속성->Dinput8.lib dxguid.lib
하나라도 빠지면 제대로 안된다.

2.#include <dinput.h> 한다.
3.#define KEYDOWN(name,key) (name[key] & 0x80) 선언한다.
4.객체는 두개가 필요하다
LPDIRECTINPUT8       g_lpdi       = NULL;
LPDIRECTINPUTDEVICE8   m_keyboard;

생성자나 어플 초기화 함수에서
DirectInput8Create( GetModuleHandle(NULL), DIRECTINPUT_VERSION,
  IID_IDirectInput8, (VOID**)&g_lpdi, NULL ) ;

 g_lpdi->CreateDevice(GUID_SysKeyboard, &m_keyboard, NULL);
 m_keyboard->SetDataFormat(&c_dfDIKeyboard);
  m_keyboard->Acquire();//이거 안해주면 키 눌린듯한 상태가 된다.

초기화 시켜준다.

5.키이벤트 처리를 위한 메소드 (예)
void MoveChar()
{
   char buffer[256];
 m_keyboard->GetDeviceState(sizeof(buffer), (LPVOID)buffer);
 if(KEYDOWN(buffer, DIK_LEFT)) 
 {
  charX-=1;
 }
 else if(KEYDOWN(buffer, DIK_RIGHT))
 {
  charX+=1;
 }
 else if(KEYDOWN(buffer, DIK_UP))
 {
  charY-=1;
 }
 else if( KEYDOWN(buffer, DIK_DOWN))
 {
  charY+=1;
 }
}


뭐 대략 이런식으로 해준다.
이것으로 키이벤트도 대략 된건가 흠

크흐흐 신기하면서 재밌군 케릭터 요리조리 움직인다눼~
마음 급해서 이것저것 하려하지말고 계획했던거 대로 차근 차근 합시다.