2D 게임을 개발 중입니다. 예를 들어 대각선 문자 이동과 같은 다중 키 누르기/해제 감지가 동시에 필요합니다.동시 다중 키 누름 릴리스 지연
문제는 "동시"(내 반응과 아무런 관련이 없습니다. 매우 빠르게 누르거나 누르십시오) 메시지 사이의 여러 키 (두 개)를 눌러야 만 종종 단일 프레임 (16 비트의 VSync
) 예를 들어, 50-100 밀리 초에 도달 할 수 있으므로 문자는 단일 방향으로 이동하고 대각선 방향으로 조금 지연된 후에 만 (의도 된대로) 움직입니다.
WinAPI
메시지에 대한 정상인가요 아니면 하드웨어의 한계? 입력을 더 빠르게 감지 할 수 있습니까? 아니면 게임이 어떻게 처리합니까? 좀 도움이
유일한 해결책은 (예를 매 100 ms 동안) 정기 지연과 게임 로직에서 프로세스 입력이지만,이 희생은 매우 반응성을 제어 할 수 있습니다.
내가 WinAPI를 while 루프에서 WM_KEYDOWN
/WM_KEYUP
메시지를 전달하고있다.
while (PeekMessage(&message, 0, 0, 0, PM_REMOVE))
DispatchMessage(&message);
는 또한
GetMessage
렌더링 스레드에서 별도의 입력을 파견했습니다.
지연 측정 테스트 프로젝트 : pastebin
실제 OpenGL
대각선 이동 테스트 프로젝트 : pastebin
왜 'GetMessage()'대신'PeekMessage()'를 사용하고 있습니까? –
메시지를 디스 패칭 할 때'PeekMessage'를 사용하고 블로킹이 아니기 때문에 동일한 루프에서 렌더링합니다. 메시지 루프를 분리하고 다른 스레드에서 렌더링 할 때 나는'GetMessage'를 사용합니다. – Demion