+++++++++++++++++++++++++++++++++++++++++++++
++++++++++++ OGRE中按键的灵活控制 +++++++++++
+++++++++++++++++++++++++++++++++++++++++++++
1. 单键:
由下面的两个函数可以得到按键按下和释放时的状态。
//当键盘按键按下
bool onKeyPressed(const KeyEvent & evt);
//当键盘按键释放
bool onKeyReleased(const KeyEvent & evt);
evt.getKey()可以得到该键所对应的keycode,如果想进一步看到其10进制的制。
可以能过设置一个 unsigned long _keyCode;变量
_keyCode &= evt.getKey();//如此就能找到其对应的10进制了。
注:如果上面的 _keyCode 初始值为0Xff,而当按下键和释放键时,均用 keyCode ^= evt.getKey()。 (^异或,相同为0,不同为1)。最终按下后,keyCode = 0;
按键的keycode表:
2. 双键:
当你按下了D键,还没有释放,再去按A键,然后随便释放A或D这种情况。也就是两个键的组合按下或释放。
假设:
右键: D 为 0000 0001 (0x1)
左键: A 为 0000 0010 (0x2)
当你第一次按下键时,用一个变量S(初始为0xff)来“与”该键的对应值。以后就”或”。
当你释放时,就用变量S来和该键“异或“。
Eg: 当你第一次按下了D:
S &=D(相当于把D付值给了S,S=0x1)
再按下A:
S |= A (S = 0X3);
若释放了D:
S ^=D (S =0X2).也就是说此时,还有A没有被释放掉。
若释放了A:
S ^=A (S =0X1).也就是说此时,还有D没有被释放掉。
若A和D都释放掉了。
S = 0x00;
3. 多键: