好的,我正在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);
}
Run Code Online (Sandbox Code Playgroud)
超级简单吧?我遗漏了很多其他的代码,但它根本没有弄乱这些布尔值,所以不应该需要它们.好吧,现在这里抓住了.如果我使用此代码,它可以完美地工作.向前是向前,向右是向右,向左是向左,向后是向后.
问题是,我希望能够对角移动.那么,明显的答案是摆脱别的吧?好吧,我做.
但是,程序变得混乱!前进不前进!它没有做任何事情!左边倒退,倒退倒退右边!唯一正常的是正确的!巧合的是最后一次输入检查!但是我一直按1键,但它们仍然坏了!发生了什么?我打破了视觉工作室吗?这个程序是否正在渗透到另一个方面?到底是怎么回事?!?
你忘记了开关盒上的"断裂"了吗?
例:
LRESULT CALLBACK WindowProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
switch (uMsg)
{
case WM_KEYDOWN:
switch (wParam & 0x7F)
{
case 'W':
WDown = true;
break;
case 'A':
ADown = true;
break;
case 'S':
SDown = true;
break;
case 'D':
DDown = true;
break;
}
break;
case WM_KEYUP:
switch (wParam & 0x7F)
{
case 'W':
WDown = false;
break;
case 'A':
ADown = false;
break;
case 'S':
SDown = false;
break;
case 'D':
DDown = false;
break;
}
}
break;
}
// Render Frame code:
void Renderer::RenderOneFrame(bool w, bool a, bool s, bool d)
{
// Check Input
if(w)
m_camera.MoveForward(1);
if(a)
m_camera.Strafe(-1);
if(s)
m_camera.MoveForward(-1);
if(d)
m_camera.Strafe(1);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
147 次 |
| 最近记录: |