わかりました、directx9 で簡単なカメラ移動プログラムを作成しています。次のようにメッセージから入力を取得します。
LRESULT CALLBACK WindowProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
switch (uMsg)
{
case WM_KEYDOWN:
switch (wParam & 0x7F)
{
case 'W':
WDown = true;
case 'A':
ADown = true;
case 'S':
SDown = true;
case 'D':
DDown = true;
}
case WM_KEYUP:
switch (wParam & 0x7F)
{
case 'W':
WDown = false;
case 'A':
ADown = false;
case 'S':
SDown = false;
case 'D':
DDown = false;
}
}
}
// Render Frame code:
void Renderer::RenderOneFrame(bool w, bool a, bool s, bool d)
{
// Check Input
if(w)
m_camera.MoveForward(1);
else if(a)
m_camera.Strafe(-1);
else if(s)
m_camera.MoveForward(-1);
else if(d)
m_camera.Strafe(1);
}
超シンプルでしょ?ただし、他の多くのコードを省略しましたが、これらのブール値をまったく台無しにしないため、必要ないはずです。さて、ここでキャッチです。このコードを使用すると、完全に機能します。フォワードはフォワード、ライトはライト、レフトはレフト、バックはバックです。
問題は、斜めに移動できるようにしたいです。ですから、明らかな答えは、他のものを取り除くことですよね? そうですね。
しかし、プログラムは大混乱に!前に進めない!それは何もしません!左は後方へ、後方は右へ後方へ!正しく機能する唯一のものは正しいです!これは偶然にも最後にチェックされた入力です! しかし、一度に 1 つのキーを押していますが、まだ壊れています! どうしたの?私はビジュアルスタジオを壊しましたか?このプログラムは別の次元に漏れていますか? 何が起こっている?!?