-1
以下は、キーが押されているかどうかを取得するために使用するコードです。キーの状態は状態によって更新されます。 私は値0,1,2,3の単純な配列に像を保持します。 の形式は次のとおりです。keyboardmap [256] = {0};Win32 WM_KEYDOWNとWM_KEYUPとステータスが "スタック"になった
問題は、これまでに何をしようとしても、キーはいつか固まってしまいます。あたかもWM_KEYUPが正常に起動しないかのようにゼロにリセットされることはありません。
while (true)
{
if (PeekMessage(&msg, 0, 0, 0, PM_REMOVE))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
if (msg.message == WM_QUIT)
{
break;
}
// Check for keystates and update them.
if (msg.message == WM_KEYDOWN)
{
// Fetch the key state.
unsigned int keycode = msg.wParam;
unsigned int cstate = engine.GetKeyState(msg.wParam);
if (engine.GetKeyState(keycode) == 0)
{
engine.SetKeyState(keycode, 1); // Just started pressing.
}
else
{
engine.SetKeyState(keycode, 2); // Actively pressed down.
}
}
else if (msg.message == WM_KEYUP)
{
// Fetch the key state.
unsigned int keycode = msg.wParam;
unsigned int cstate = engine.GetKeyState(msg.wParam);
if (engine.GetKeyState(keycode) == 2)
{
engine.SetKeyState(keycode, 3);
}
else
{
engine.SetKeyState(keycode, 0);
}
}
}
}
あなたはこのループは100を食べることを知っています%のCPU? 'PeekMessage'は非ブロックです。代わりに 'GetMessage'を使うことを考えましたか? –
はい、私はそれを知っています、後でこれを制限します、これはリアルタイムゲームのためのものです。 –
システムはすでにキーボードの状態を追跡しています。同じようにあなたに無意味です。 100%CPUは避けられます。 –