0

我正在使用免费版本的 Havok 物理引擎在 C++ 中的 Windows 7 上创建一个简单的 3D 游戏。我想使用 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,但我找不到关于如何使用它们的简单解释,而且据我所知,它们比异步更基于事件。

上面的代码片段有问题,还是我应该尝试另一种方法?

4

2 回答 2

0

最佳猜测:您正在检查“ A”而不是“ a”。当然,除非您同时按住 shift 键,否则仅按 a 键不会触发您的代码。

于 2011-07-06T15:00:56.580 回答
0

看来我的问题毕竟不是 GetAsyncKeyState(),而是我使用 FindWindow() 和 GetWindowRect()。它没有认识到当前窗口是可视调试器。固定的。

于 2011-07-07T09:39:24.050 回答