一.非缓冲方式能处理鼠标或键盘长按的事件,实时性强 缓冲方式则不能长按事件,用于非实时响应。 非缓冲方式 步骤: 1、设置帧监听器继承方式public ExampleFrameListener 设置鼠标键盘的处理方式 在构造函数中:ExampleFrameListener(win, cam, false, false) 在 frameStarted中: 2、鼠标键盘指针捕获事件 bool frameStarted(const FrameEvent &evt) mMouse->capture(); //3、通过事件类型进行相应的处理 if(mKeyboard->isKeyDown(OIS::KC_ESCAPE)) return true;
缓冲方式 1、设置帧监听器继承方式public ExampleFrameListener, public OIS::MouseListener, public OIS::KeyListener 设置鼠标键盘的处理方式 在构造函数中:ExampleFrameListener(win, cam, true, true) 这样就不再需要手工写捕获事件的代码capture 2、构造函数里注册侦听器 mMouse->setEventCallback(this); // MouseListener // KeyListener
二.OIS 输入系统中的缓冲输入与无缓冲输入的区别是无缓冲输入是每帧监听键盘和鼠标的输入状态,而缓冲输入则是用触发式的方法监听输入状态。 当某个键被按下时,那么该键的按下事件就被触发,当一个键被释放时,该键的释放事件就被触发,而且事件触发后,这个事件会告知注册的监听该设备的帧监听器。 特别重要的是OIS 输入系统对键盘,鼠标和手柄分别只能建立一个监听关系,这完全是为了简洁和效率。多次调用setEventCallback 函数的结果是真正起作用的是最后一次调用。如果你有多个对象需要接受键盘,鼠标或者手柄消息,你必须手动发送消息。值得一提的是我们仍然在frameStarted 中调用Mouse::capture 或者Keyboard::capture 来捕获状态。OIS 没有应用多线程技术,因而在你的程序中,你必须指定在何时捕获设备的输入状态。 KeyListener 接口
非缓冲输入以及缓冲输入使用效果的最大区别: 非缓冲能处理 键盘或者鼠标 按住的事件 缓冲不能处理 键盘或者鼠标 按住的事件
|
在Ogre中使用OIS的两种模式(非缓冲输入和缓冲输入)
最新推荐文章于 2020-04-13 16:55:16 发布
在Ogre中使用OIS的两种模式(非缓冲输入和缓冲输入)