OIS中createInputObject第二个参数指定buffermode的作用?
Object * createInputObject (Type iType, bool bufferMode, const std::string &vendor="")
如题~
还有~是不是不开启缓存模式的话~监听是不会获得信息的?
还有个小问题。。。为啥OIS的lib是重编了~使用他的程序也使用新ois lib重编了还是跟不到下面的代码。。。
最疑惑的问题:不开启缓存的情况下~和开启缓存的实现有什么不一样吗?假定在调用capture函数之前迅速按了下a和s,那么在不开启缓存和开启缓存的情况下程序运行的大概流程分别是什么?
谢谢大大们了~
- C/C++ code
void Win32Keyboard::capture(){ if( mBuffered ) _readBuffered(); else _read();}void Win32Keyboard::_readBuffered(){... //Fire off event if( mListener ) ret = mListener->keyReleased( KeyEvent( this, kc, 0 ) );...}void Win32Keyboard::_read(){ HRESULT hr = mKeyboard->GetDeviceState( sizeof(KeyBuffer), &KeyBuffer ); if( hr == DIERR_INPUTLOST || hr == DIERR_NOTACQUIRED ) { hr = mKeyboard->Acquire(); if (hr != DIERR_OTHERAPPHASPRIO) mKeyboard->GetDeviceState(sizeof(KeyBuffer), &KeyBuffer); } //Set Shift, Ctrl, Alt mModifiers = 0; if( isKeyDown(KC_LCONTROL) || isKeyDown(KC_RCONTROL) ) mModifiers |= Ctrl; if( isKeyDown(KC_LSHIFT) || isKeyDown(KC_RSHIFT) ) mModifiers |= Shift; if( isKeyDown(KC_LMENU) || isKeyDown(KC_RMENU) ) mModifiers |= Alt;}
[解决办法]
不懂了~
[解决办法]
缓冲模式内部有缓冲区(direct input 8);保存自上次读取以来的按键、超过缓冲则丢失,立即不保存,只是你capture 瞬间按键情况;两种各有优势。ogre 用的Ois在window 平台实现也一样(内部用dx 实现);用手机输入真麻烦!