本人编的软件,键盘输入“ESC”“1”和“2”都失灵,其他键没问题,研究半天
发现问题出在下面
char keys[256]
…….
…….
//将键盘获取到的信息放入keys[]数组中,
if (!SUCCEEDED(dikeyboard->GetDeviceState(sizeof(keys), (LPVOID)&keys)))
dikeyboard->Acquire();
//当本人把这个测试键入的语句放到这里就没任何问题
if (keys[DIK_1] & 0x80)
gameover = true; //退出程序
for (int i = 0; i< 4; i++) //这是一堆与键盘输入毫不相干的代码
{
ZeroMemory( &controllers[i], sizeof(XINPUT_STATE) );
XINPUT_STATE state;
DWORD result = XInputGetState( i, &state );
if (result == 0) controllers[i] = state.Gamepad;
}
//当本人把测试键入的语句放到这里就失灵了,同理程序其他地方也就失灵,但只有ESC、1、2 这三个键失灵
//原因是这三个键分别在keys[1] keys[2] keys[3] 里,显然是keys[]数组的这三个丢失,keys[0]似乎没有代表的按键,不好测试。
if (keys[DIK_1] & 0x80)
gameover = true; //退出程序
本人买的书配的参考电子资料里有相同的代码模板,但是却没有这个问题,
这是什么怪事?
发现问题出在下面
char keys[256]
…….
…….
//将键盘获取到的信息放入keys[]数组中,
if (!SUCCEEDED(dikeyboard->GetDeviceState(sizeof(keys), (LPVOID)&keys)))
dikeyboard->Acquire();
//当本人把这个测试键入的语句放到这里就没任何问题
if (keys[DIK_1] & 0x80)
gameover = true; //退出程序
for (int i = 0; i< 4; i++) //这是一堆与键盘输入毫不相干的代码
{
ZeroMemory( &controllers[i], sizeof(XINPUT_STATE) );
XINPUT_STATE state;
DWORD result = XInputGetState( i, &state );
if (result == 0) controllers[i] = state.Gamepad;
}
//当本人把测试键入的语句放到这里就失灵了,同理程序其他地方也就失灵,但只有ESC、1、2 这三个键失灵
//原因是这三个键分别在keys[1] keys[2] keys[3] 里,显然是keys[]数组的这三个丢失,keys[0]似乎没有代表的按键,不好测试。
if (keys[DIK_1] & 0x80)
gameover = true; //退出程序
本人买的书配的参考电子资料里有相同的代码模板,但是却没有这个问题,
这是什么怪事?
解决方案
80
检查能否有越界操作覆盖了,或单步调试跟踪看是在哪发生了变化