이번 강의에서는 햄 엔진을 이용한 Keyboard 및 Mouse 처리 코드를 작성해보겠습니다.
프로토 타입
일단 햄엔진에 포함된 입력관련 객체 및 함수 입니다.
GetCursorPos() : 마우스의 위치를 얻음
SetCurPos(int iX,int iY) : 마우스의 위치를 설정함 ( 화면 구역안에서의 좌표임. )
SetCurVisible(BOOL bShow) : 마우스를 보여줄것인지 말것인지 결정.(DoEvents 함수 내에서만 작동)
GetCurVisible() : 마우스의 표시 상태 알아보기
m_Mouse.GetKeyState(0) : 왼쪽 마우스의 상태를 얻음
m_Mouse.GetKeyState(1) : 오른쪽 마우스의 상태를 얻음
m_Keyboard.GetKeyState(키보드 값) : 키보드 값의 상태를 얻음
m_Mouse.SetLockState(코드값,TRUE); // 마우스의 중복 방지를 위한 마우스 잠금. ( 마우스 버튼을 떼면 잠금 자동 풀림 )
m_Mouse.SetLockState(코드값,FALSE); // 마우스 잠금 해제
m_Keyboard.SetLockState(코드값,BOOL bShow); // 위와 같은 원리임
실제 구현
- 키보드 -
그리고 이젠 간단한 타자 프로그램을 위한 키보드 입력을 구현해보겠습니다.
if(m_Keyboard.GetKeyState(DIK_ENTER)) { // 엔터 키를 눌렀을 경우
ComputeData(); // 타자수를 계산하라고 알림
m_Keyboard.SetLockState(DIK_ENTER,TRUE); // 엔터 키를 계속 누르면 이 if 문 내용이 작동되는 것을 방지.
// 다시 엔터키를 떼었다가 눌러야지 잠금이 풀림.
}
그리고, 다음으로는 일반 게임에서 사용되는 앉았다, 일어나는 키를 구현해보겠습니다.
if(m_Keyboard.GetKeyState(DIK_INSERT)) { // Insert 키를 눌렀을 경우
SitDown(); // 앉으라는 함수
m_Keyboard.SetLockState(DIK_INSERT,TRUE); // Insert 키를 계속 누르면 이 if 문 내용이 작동되는 것을 방지.
// 다시 Insert 키를 떼었다가 눌러야지 잠금이 풀림.
}
- 마우스 -
다음으로는 FPS 게임에서 마우스가 보이지 않고, 항상 가운데에 위치하는 것을 구현해보겠습니다.
그리고, 키보드를 누르고 있으면 계속 반응이 되지 않게, 키보드 잠금을 해보겠습니다.
SetCurVisible(FALSE); // 보이지 않게 요청함.
SetCurPos(400,300); // 800X600 화면에서는 400, 300 위치가 가운데 이다.
if(m_Mouse.GetKeyState(0)) { // 마우스 왼쪽 버튼을 눌렀을 경우
Attack();
m_Mouse.SetLockState(0,TRUE); // 마우스 왼쪽 키를 계속 누르면 이 if 문 내용이 작동되는 것을 방지.
// 다시 마우스 왼쪽 키를 떼었다가 눌러야지 잠금이 풀림.
}
이상으로 햄 엔진을 이용한 간단한 마우스/키보드 입력 처리를 해보았습니다.
Thanks for reading this lecture.