天天看點

DirectInput的立即模式與緩沖模式

鍵盤為了保證明時性,一定要用立即模式! 滑鼠可以使用緩沖的,這樣可以得到一個連貫的輸入狀态。 第一段引用自http://blog.csdn.net/sosidami/archive/2009/10/23/4719465.aspx DirectInput 裝置以立即模式擷取輸入資訊,例如,如果鍵盤按鍵的速度非常快,那麼在DirectInput讀取資料那一刻之前的案件資料将不能被DirectInput裝置讀取。與立即模式相對的是緩沖模式,此時裝置輸入資料即将被放進緩沖區中供DirectInput裝置使用。對于遊戲開發來說,通常依照鍵盤和遊戲杆的各種按鍵執行畫面的更新,是以,利用DirectInput裝置的立即模式來讀取它們的輸入資料較為适宜。相反在一個畫面中滑鼠的移動式連貫的,為了在遊戲程式可多次連續的滑鼠移動量,就需要采用DirectInput的緩沖模式來讀取滑鼠的輸入。

看看Ogre提供的ExampleFrameListener的構造函數聲明: ExampleFrameListener(                           RenderWindow* win,                            Camera* cam,                            bool bufferedKeys = false,                            bool bufferedMouse = false,                           bool bufferedJoy = false ) Keyboard,mouse,joystick預設都是立即模式。 假如需要要對keyboard采取立即模式,對mouse采取緩沖模式,可以這樣建立ExampleFrameListener對象,new ExampleFrameListenr(win, cam, false, true); 然後還需要實作一些滑鼠的響應函數,例如mousePressed,mouseMouved,mouseReleased. 最終在ExampleFrameListener的構造函數中建立keyboard與mouse的代碼如下: //Create all devices (We only catch joystick exceptions here, as, most people have Key/Mouse) mKeyboard = static_cast<OIS::Keyboard*>                       (mInputManager->createInputObject( OIS::OISKeyboard, bufferedKeys )); mMouse = static_cast<OIS::Mouse*>                       (mInputManager->createInputObject( OIS::OISMouse, bufferedMouse )); try { mJoy = static_cast<OIS::JoyStick*>                       (mInputManager->createInputObject( OIS::OISJoyStick, bufferedJoy )); } catch(...) {         mJoy = 0; } 代碼采取異常方式建立Joy stick很優美! 另有一篇:

繼續閱讀