Асинхронный ввод с клавиатуры на win32

Я создаю простую 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, но не могу найти простых объяснений того, как их использовать, и насколько я могу судить, они больше основаны на событиях, чем асинхронны.

Есть ли проблема с фрагментом выше, или я должен попробовать другой подход?

2 ответа

Решение

Похоже, что моя проблема заключалась не в GetAsyncKeyState(), а в моем использовании FindWindow() и GetWindowRect(). Он не признавал, что текущее окно было визуальным отладчиком. Исправлена.

Наилучшее предположение: вы проверяетеA" вместо "aMsgstr "Если, конечно, вы не удерживаете и клавишу Shift, простое нажатие клавиши a не вызовет ваш код.

Другие вопросы по тегам