GetKeyState에 대해 질문이요..
가이
어설픈 겜 하나를 만들고 있는데 그냥 물체가 방향키로 입력받고 스페이스로 점프를 하는 내용이에요..하다보니까 문제가 키가 동시 입력이 안 받아진다는 거에요 ㅠㅠ찾아보니까 키를 동시입력 받게 해주는 GetKeyState 혹은 AsyncKeyState 가 있더라구요..저는 현재 방향키를 누르면서 스페이스를 누르면 예를 들면 앞으로 가는 키보드 ↑를 누르면서 스페이스 누르면 점프하면서 앞으로 가도록 하고 싶은데현재 동시입력이 안 받아지니까 ↑ 누르다가 스페이스 입력하면 제자리에 딱 멈춰서 점프를 해요그리고 스페이스 한번 입력받고 나면 계속 그 자리에멈춰있고..ㅠ (방향키 다시 뗐다가 누르기 전까지 그대로)어떤 식으로 하면 해결할 수 있을까요?일단 인터넷에서 보고 흉내는 내봤는데 하나도 안되네요 아래 코드입니다;GLvoid Keyboard(unsigned char key, int x,int y)
{if(GetAsyncKeyState(VK_SPACE) & 0x8000)
{
jump_command=1; //스페이스를 눌렀을시 전역변수 jump_command=0이 1로 바뀌어서 점프를 하게 함
}
glutPostRedisplay();
}void SpecialKeyboard(int key, int x, int y)
{
if(GetAsyncKeyState(VK_UP) & 0x8000) //앞으로
{
object_move_z=object_move_z-object_move1;
printf(현재 z 좌표값 = %f \n, object_move_z);
}if(GetAsyncKeyState(VK_LEFT) & 0x8000) //왼쪽으로
{
object_move_x=object_move_x-object_move3;
printf(현재 x 좌표값 = %f \n, object_move_x);
}
if(GetAsyncKeyState(VK_RIGHT) & 0x8000) //오른쪽으로
{
object_move_x=object_move_x+object_move3;
printf(현재 x 좌표값 = %f \n, object_move_x);
}glutPostRedisplay();
}void TimerFunction (int value) //이 함수가 점프를 하게 하는 함수입니다
{
if(jump_command==1) //스페이스를 눌러스 1로 바뀌었을시
{
if(!op)
{
if(object_move_y80) //y축 높이가 80이하일시 위로점프하게 함
{
object_move2=10.0f;
}
else if(object_move_y80) //y축 높이가 80을 넘으면 다시 아래로 내려오게 함
{
op=1;
object_move2=-10.0f;
}
}object_move_y=object_move_y+object_move2; //이 식이 점프하고 내려오는 식
if(object_move_y==0)
{
op=0;
jump_command=0;
}
}
glutPostRedisplay();
glutTimerFunc(100, TimerFunction, 1);
}지금 해보니까 방향키 값(방향키 값 안에다가 식을 넣은 형태)들은 동시 입력이 되네요대각선으로 움직여집니다만점프키는 안에 식을 넣은게 아니라 단순히 if문을 바꾸는 형태라 그런지 안 먹히네요;;
-
라임나무 2023-12-12
점프하는 부분에서... 값을 입력 받은후에 바로 검사를 해야 점프 할거같은데요..?
jumpcommand가 1로 바뀌는 if문 다음에 바로 TimerFunction을 선언해주셔야 하고
그리고 매개변수를 선언했는데 사용하지 않는것같은데..
value라는 매개변수를 없애던지.. 아니면 jumpcommand를 매개변수로 받아서 value값을 사용하시는게 맞을거 같고 점프 도중이동이 필요하다면... getasynkeystate 를 점프하는곳에 선언하셔서.. -
활력초 2023-12-12
감사합니다! 소스 더 붙였습니다
지금 방향키들끼리는 동시입력이 됩니다 오른쪽, 앞쪽 누르면 오른쪽 대각선으로 움직이는데..
점프는 여전히 반응이 없네요..
추측컨데 방향키 값들은 각 if문 안에 object_move_x=object_move_x+object_move3;
이런 식들을 포함하고 있어서 동작하는 것 같고
jump 키는 단순히 jump_command=1; 이거 뿐이여서 동작을 안 하는 것 같은데.. -
어둠 2023-12-12
점프하는 소스를 보여주세요 뭔가 for문으로이루어 져있는건지... 아니면 저 점프 커멘드라는 변수 하나만으로 점프를 하는건지.. 함수가 또 있는건지... 단지 위에있는 소스만으로는 대답해드릴수있는게 한정되어있기때문에 소스를 더 공개해주셔야할거같네요..
-
똘끼 2023-12-12
다중 if문을 이용하면 스페이스바 클릭이 동작할때 다시 getAsyncKeyState를 써서 앞으로누르면 앞으로 가고 뒤로 누르면 뒤로 가는 방식으로 하면되지않을까요??