Я создаю простую 3D-игру для Windows 7 на C++, используя бесплатную версию физического движка Havok. Я хочу использовать клавиши WASD для перемещения персонажа. Структура кода такова, что мне нужно асинхронно захватить этот ввод; в каждом кадре сцены вызывается функция для обновления положения персонажа (я хочу попробовать проверить, нажата ли в данный момент клавиша, вместо того, чтобы использовать какой-либо прослушиватель событий). Я искал хорошее решение, так как почти ничего не знаю о функциях win32, и собрал это вместе:
if (GetAsyncKeyState(0x41) & 0x8000) posX=-1.0f; //A
if (GetAsyncKeyState(0x44) & 0x8000) posX=1.0f; //D
if (GetAsyncKeyState(0x57) & 0x8000) posX=1.0f; //W
if (GetAsyncKeyState(0x53) & 0x8000) posX=-1.0f; //S
После проверки некоторых операторов printf визуальный отладчик, похоже, не получает никаких входных данных. Я знаю о WM_KEYDOWN и WM_KEYUP, но не могу найти простых объяснений того, как их использовать, и, насколько я могу судить, они больше основаны на событиях, чем на асинхронности.
Есть ли проблема с приведенным выше фрагментом или мне следует попробовать другой подход?
if (GetAsyncKeyState('A') < 0)
- person Hans Passant   schedule 06.07.2011HWND curWin = FindWindow(NULL,TEXT("HavokVisualDebugger")); if (GetForegroundWindow() != curWin) return;
, и он, кажется, возвращается каждый раз, когда он запускается. - person paperbd   schedule 06.07.2011