好吧,我正在directx9中製作一個簡單的攝像機運動程序。我從消息的輸入如下所示:C++輸入與WINAPI
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個鍵,但他們仍然壞了!發生了什麼?我打破了視覺工作室嗎?這個程序是否泄漏到另一個維度?到底是怎麼回事?!?
您沒有任何'在你的交換機break'語句。由於保留了訂單,如果是這樣,我不會感到驚訝。另外,AFAIK,'wParam&0x7F'是不必要的。只是'wParam'好。 – chris 2012-07-13 02:15:30
YUP THATS IT。感謝您的快速解決方案和信息! – wokparty 2012-07-13 02:19:54