Асинхронный ввод с клавиатуры на win32 - PullRequest
0 голосов
/ 06 июля 2011

Я создаю простую 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 ]

0 голосов
/ 07 июля 2011

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

0 голосов
/ 06 июля 2011

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

...