OIS输入

OIS并不是ogre的一部分,它是一个独立的轻量级的开源输入框架,想使用它需要引入一个类似OIS_d.dll的动态库(也可以自己编译源码获取)。

InputManager :作为OIS的管理者是得到所有输入设备的入口

Cpp代码    收藏代码
  1. InputManager *     g_InputManager = 0;         //输入系统管理器  
  2. g_InputManager = InputManager::createInputSystem(g_hWnd);  

 这里需要注意得的是必须传入一个窗口句柄进去,明确当前InputManager是为谁服务的。

1.非缓冲输入: 这种模式最大的特点就是没有特点(没有对输入控制对象进行特殊处理),这种模式下OIS基本上只是取到了一个创建和管理输入设备的作用,比较原始。

Cpp代码    收藏代码
  1. OIS::Keyboard* mKeyboard;  
  2. OIS::Mouse*     mMouse ;  
  3.   
  4. mKeyboard = static_cast<OIS::Keyboard*>(mInputManager->createInputObject(OIS::OISKeyboard, false));  
  5. mMouse = static_cast<OIS::Mouse*>(mInputManager->createInputObject(OIS::OISMouse, false));  

 第二个参数为false即为非缓冲输入。

在ogre中使用:

Cpp代码    收藏代码
  1. bool frameStarted(const FrameEvent& evt)  
  2. {  
  3. mKeyboard->capture();  
  4. mMouse->capture();  
  5. if(mKeyboard->isKeyDown(OIS::XXXX))  // 需要通过这种方式直接调用判断处理  
  6. {  
  7. }  
  8. }  

2.缓冲输入 :OIS通过回调的方式,让代码看起来更加整洁,除此之外或许还做了其他的事情。

Java代码    收藏代码
  1. OIS::Object* obj = mInputMgr->createInputObject(OIS::OISKeyboard, true);  
  2. mKeyboard = static_cast<OIS::Keyboard*>(obj);  
  3. mMouse = static_cast<OIS::Mouse*>(mInputMgr->createInputObject(OIS::OISMouse, true));  
  4.   
  5. mKeyboard->setEventCallback(this);  
  6. mMouse->setEventCallback(this);  

 除第二个参数为true以外,每个对象还需要通过回调函数获取一个事件处理对象,针对不同的输入设备,事件处理对象的类型不同。

OIS::KeyListener

bool keyPressed(const OIS::KeyEvent &arg)

bool keyReleased(const OIS::KeyEvent &arg)

OIS::MouseListener

bool mouseMoved(const OIS::MouseEvent &arg)

bool mousePressed(const OIS::MouseEvent &arg, OIS::MouseButtonID id)

bool mouseReleased(const OIS::MouseEvent &arg, OIS::MouseButtonID id)

ogre里面使用:

Java代码    收藏代码
  1. bool frameStarted(const FrameEvent& evt)  
  2. {  
  3. mKeyboard->capture();  
  4. mMouse->capture();  
  5. }  

非缓冲输入与缓冲输入的区别:非缓冲输入可以相应鼠标或键盘持续按下的事件。

你可能感兴趣的:(OIS输入)