· cocos2d에서는 중복키 입력에 대해서 꽤 불친절합니다.
// 시도해봤자 안되는 것들 입니다.. 같은 전철을 밟지마세요...ㅠ
if(GetAsyncKeyState('A') && GetAsyncKeyState('D')) {}
bool A_keyPressed = true;
bool D_keyPressed = true;
if(A_keyPressed && D_keyPressed) {}
// switch문 안에서의 이중 case문 등등
· 여러가지 시도를 해봤지만 찾아낸 방법은 비트연산자입니다.
· 비트연산자에서 사용할 연산자는 복합비트연산자인 |= 와 ^=을 사용해야합니다.
· 간단하게 설명하자면 |=은 ON의 기능을, ^=은 OFF의 기능이라고 보시면 됩니다.
· 비트연산자의 플래그를 구글링해보시면 구체적인 이해가 쉽습니다.
· 기초 키보드를 선언 및 초기화한 상태에서, 헤더에 int형 변수 keyValue를 선언해줍니다.
· 앞서 다루었던 onKeyPressed와 onKeyReleased 콜백함수들 입니다.
void Keyboard::KeyPressed(EventKeyboard::KeyCode keyCode, Event * event)
{
switch (keyCode)
{
case EventKeyboard::KeyCode::KEY_W:
// 키보드 W를 눌렀을 때, 1에 해당하는 비트값을 keyValue에 할당한다.
keyValue |= 1;
// W키를 눌렀을 때, keyValue값이 1이라면
if (keyValue == 1)
{
// 게임을 제작할 때 사용한 위로 쳐다보는 애니메이션 함수입니다.
// 위로 쳐다보는 애니메이션 함수를 실행해라.
lookingUp();
}
break;
case EventKeyboard::KeyCode::KEY_D:
// 키보드 D가 눌렀을 때, 8에 해당하는 비트값을 keyValue에 할당한다.
keyValue |= 8;
if (keyValue == 8)
{
// 캐릭터가 오른쪽으로 움직이는 애니메이션 함수
Character_rightRunning();
}
break;
}
이런식으로 W에는 비트 1에 해당하는 값을, D에는 비트 8에 해당하는 값을 ON해줍니다.
WD가 눌렀을 때는 어떻게 해야할까요?
간단하게 keyValue값이 9 일때 라고 if문을 넣어주시면 됩니다.
if (keyValue == 9)
{
lookingUp_rightRunning()
}
누르던 키가 떼졌을 때는 ^=을 통해 OFF해줍니다.
void Keyboard::KeyReleased(EventKeyboard::KeyCode keyCode, Event * event)
{
switch (keyCode)
{
case EventKeyboard::KeyCode::KEY_W:
// W키를 뗐을 때, keyValue값에 할당되어 있는 값을 OFF 해줍니다.
keyValue ^= 1;
// W키를 뗐을 때, keyValue값이 0이라면 Idle()함수를 액션.
if (keyValue == 0)
{
Idle();
}
break;
}
case EventKeyboard::KeyCode::KEY_D:
keyValue ^= 8;
if (keyValue == 0)
{
Idle();
}
break;
}
이런식으로 원하시는 키에 비트값을 할당/비할당 해주시면, 간단하게 키보드의 중복입력이 가능합니다.
'Cocos2d-x' 카테고리의 다른 글
| 7. 키보드(Keyboard) (0) | 2021.08.28 |
|---|---|
| 6. 애니메이션(Animation) (0) | 2021.08.28 |
| 5. 스케줄(schedule) (0) | 2021.08.18 |
| 4. 액션(Action) (0) | 2021.08.17 |
| 3. Menu (0) | 2021.08.07 |