const char IsPressed = 1; // 1
const char WasHeldDown = 2; // 10
const char IsFirstPress = 4; // 100
char* keystates[256];
Class::CalculateKeyStates()
{
for(int i = 0; i < 256; ++i)
{
if(this->IsDown(i))
{
keystates[i] |= IsPressed; // turn on
if(keystates[i] & WasHeldDown)
{
//keystates[i] |= IsFirstPress;
keystates[i] &= ~IsFirstPress; // turn off
}
else
{
keystates[i] |= WasHeldDown + IsFirstPress; // Turn on
}
}
else
{
keystates[i] = 0; // Turn ALL off
}
}
}
该函数将是类Class的成员函数。另一个成员函数IsDown将返回true,如果有问题的关键字是关闭的,否则返回false。我的编程逻辑是否正确?
你能看到进一步改进这个功能的方法吗?
感谢
编辑:
我将扩大一点,什么是做为什么。这是对通过数组keyStates(这是三个bools的结构)设置的所有密钥的IsPressed设置为false的代码的修改。然后再次将Ispressed设置为this-> IsDown的值,然后第三次循环检查密钥是否已被保留,如果已经不再按第一次,则将其设置为false。如果它没有被按下,那么先设置为true并且保持为真,那么下次它被标记为已被保持。
EDIT2:
添加到代码的一些意见和纠正一行
添加注释?关于你想要做什么以及为什么你这样做,以及你的函数的输入和输出是什么。 – mouviciel 2010-10-21 14:41:35
有点偏离主题,但许多键盘API都是基于事件的,在这种情况下,您只需监听关键事件并在这些事件中更新模型即可。 – 2010-10-21 14:42:55
@mouviciel,虽然我不会说根本不需要评论。这个代码相当自我解释是不是?显然,没有I/O。我会接受,按比例可以做评论,除非程序员可能应该能够知道按位操作正在做什么。 – thecoshman 2010-10-21 15:07:30