使用GetKeyState,我可以在按下某个键时执行某项任务。但是,如果我有if (GetKeyState(VK_UP) & 0x80)
,则在保持密钥的整个时间内返回true。
如果我只想按下键的确切时刻(因此if语句的内容不会多次运行),我该如何处理?
答案 0 :(得分:1)
记住上次循环状态是什么,只有当密钥在之前启动并且现在已关闭时才执行代码。
此外,您似乎通过使用0x80屏蔽结果来检查是否设置了高位,但是SHORT is two bytes。我认为你应该使用0x8000;或者,你可以检查结果是否< 0,因为高位表示有符号整数是否为负。
代码看起来像这样:
bool prevUpKeyState = false; // false indicates key was up
while (...) {
// ...
bool currentUpKeyState = GetKeyState(VK_UP) < 0;
if ((currentUpKeyState) && (!prevUpKeyState)) {
// Key just depressed, do stuff
}
// ...
// Update previous key state for next pass through loop:
prevUpKeyState = currentUpKeyState;
}
答案 1 :(得分:1)
您可以使用bool flag = false
并像这样使用它:
if((GetKeyState(VK_UP)&0x80) && ! flag)
{
flag = true;
}
else if((GetKeyState(VK_DOWN)&0x80) && flag)
{
flag = false;
}
if(flag) //key is just pressed
{
//TODO: Your handling here
}