這裡所說的OIS是指Object-Oriented Input System,一個可以跨平台的開源輸入系統。
網路上面搜索OIS的使用教程,基本都是和Ogre引擎結合的,而Aquilae 2是使DirectX 10的,所以在這裡直接寫個OIS以及CEGUI在DirectX環境下面的使用.
首先來看OIS:
先來這裡下載:http://sourceforge.net/projects/wgois/ 然後編譯成一個lib.
在自己的project裡面include”OIS.h”即可,然後在鏈接到那個編譯好的lib.
這裡木有包含遊戲桿的設備初始化,只有鍵盤和鼠標:
OIS::InputManager *m_pInputManager; //OIS輸入管理員
OIS::Mouse *m_pMouse; //OIS輸入鼠標器
OIS::Keyboard *m_pKeyboard; //OIS輸入鍵盤
InputManager對象是必須的,她負責整個輸入系統下面的運作。
接著再進行OIS的創建和初始化:
m_pInputManager = OIS::InputManager::createInputSystem((size_t)m_Hwnd);
m_pKeyboard = static_cast(m_pInputManager->createInputObject( OIS::OISKeyboard, true ));
m_pMouse = static_cast(m_pInputManager->createInputObject( OIS::OISMouse, true));
其中,m_Hwnd是窗口的句柄。createInputObject( OIS::OISMouse, true)這裡面參數true的意思是使用緩衝模式,如果你想使用監聽器來監聽輸入設備,那麼這裡的true參數是必須的。
下面我們開始說輸入設備的監聽器:
這裡的監聽器同時負責鼠標和鍵盤的監聽,所以得繼承來自兩個類:
class InputDeviceListener
:public OIS::MouseListener,public OIS::KeyListener
{
public:
//----------------------------------------------------------------------------------
//構造函式
//----------------------------------------------------------------------------------
InputDeviceListener();
//----------------------------------------------------------------------------------
//析構函式
//----------------------------------------------------------------------------------
~InputDeviceListener();
public:
//----------------------------------------------------------------------------------
//鼠標按下
//----------------------------------------------------------------------------------
bool mousePressed(const OIS::MouseEvent &evt, OIS::MouseButtonID id);
//----------------------------------------------------------------------------------
//鼠標釋放
//----------------------------------------------------------------------------------
bool mouseReleased(const OIS::MouseEvent &evt, OIS::MouseButtonID id);
//----------------------------------------------------------------------------------
//鼠標移動
//----------------------------------------------------------------------------------
bool mouseMoved(const OIS::MouseEvent &evt);
//----------------------------------------------------------------------------------
//鍵盤按下
//----------------------------------------------------------------------------------
bool keyReleased(const OIS::KeyEvent &evt );
//----------------------------------------------------------------------------------
//鍵盤按下
//----------------------------------------------------------------------------------
bool keyPressed(const OIS::KeyEvent &evt );
};
Read more