在Ogre中使用OIS的两种模式(非缓冲输入和缓冲输入)
2011-01-22 15:14
309 查看
(转自)http://hi.baidu.com/%D3%EF%D1%D4%D7%B7%C7%F3%D5%DF/blog/item/5288a6828a9d5ad7bc3e1e85.html
在Ogre中使用OIS的两种模式(非缓冲输入和缓冲输入)
在Ogre中使用OIS的两种模式(非缓冲输入和缓冲输入)
一.非缓冲方式能处理鼠标或键盘长按的事件,实时性强 缓冲方式则不能长按事件,用于非实时响应。 非缓冲方式 步骤: 1、设置帧监听器继承方式public ExampleFrameListener 设置鼠标键盘的处理方式 在构造函数中:ExampleFrameListener(win, cam, false, false) 在 frameStarted中: 2、鼠标键盘指针捕获事件 bool frameStarted(const FrameEvent &evt) { mMouse->capture(); mKeyboard->capture(); //3、通过事件类型进行相应的处理 if(mKeyboard->isKeyDown(OIS::KC_ESCAPE)) return false; if(mMouse->getMouseState().buttonDown(OIS::MB_Left)) return true; } 缓冲方式 1、设置帧监听器继承方式public ExampleFrameListener, public OIS::MouseListener, public OIS::KeyListener 设置鼠标键盘的处理方式 在构造函数中:ExampleFrameListener(win, cam, true, true) 这样就不再需要手工写捕获事件的代码capture 2、构造函数里注册侦听器 mMouse->setEventCallback(this); mKeyboard->setEventCallback(this); 3、实现消息处理函数 // MouseListener bool mouseMoved(const OIS::MouseEvent &e) bool mousePressed(const OIS::MouseEvent &e, OIS::MouseButtonID id) bool mouseReleased(const OIS::MouseEvent &e, OIS::MouseButtonID id) // KeyListener bool keyPressed(const OIS::KeyEvent &e); bool keyReleased(const OIS::KeyEvent &e); 二.OIS 输入系统中的缓冲输入与无缓冲输入的区别是无缓冲输入是每帧监听键盘和鼠标的输入状态,而缓冲输入则是用触发式的方法监听输入状态。 当某个键被按下时,那么该键的按下事件就被触发,当一个键被释放时,该键的释放事件就被触发,而且事件触发后,这个事件会告知注册的监听该设备的帧监听器。 特别重要的是OIS 输入系统对键盘,鼠标和手柄分别只能建立一个监听关系,这完全是为了简洁和效率。多次调用setEventCallback 函数的结果是真正起作用的是最后一次调用。如果你有多个对象需要接受键盘,鼠标或者手柄消息,你必须手动发送消息。值得一提的是我们仍然在frameStarted 中调用Mouse::capture 或者Keyboard::capture 来捕获状态。OIS 没有应用多线程技术,因而在你的程序中,你必须指定在何时捕获设备的输入状态。 KeyListener 接口 KeyListener 接口提供了两个纯虚函数,其中之一是keyPressed 函数和keyRelease 函数,函数参数是KeyEvent。 MouseListener 接口 MouseListener 接口比KeyListener 接口稍微复杂一点,不仅包含处理鼠标按键函数,还包括处理鼠标移动的函数。参数是MouseEvent。必须记住的时,鼠标移动所触发的事件中的MouseState 对象不仅包含X,Y 移动的相对坐标,也包含X,Y 在屏幕上的绝对坐标。 非缓冲输入以及缓冲输入使用效果的最大区别: 非缓冲能处理 键盘或者鼠标 按住的事件 缓冲不能处理 键盘或者鼠标 按住的事件 |
相关文章推荐
- Ogre 中使用OIS的两种模式
- Ogre中OIS的输入的使用
- OGRE+OIS 帧监听FrameListener、非缓冲输入和缓冲输入
- OGRE+OIS 帧监听FrameListener、非缓冲输入和缓冲输入
- 【angular】组件:@Input() @Output() 输入属性和输出属性以及中间人模式的使用 (一)
- javascript使用第三方组件callback的两种典型模式
- 推荐使用的两种单例模式
- OGRE缓冲鼠标键盘输入无法响应的问题
- 使用Redis做产品统计的两种模式
- OGRE+CEGUI+OIS 完美解决鼠标非独占使用
- 【angular】组件:@Input() @Output() 输入属性和输出属性以及中间人模式的使用 (一)
- 通用查询的使用模式--基本条件输入
- ActiveMQ两种消息模式以及为什么使用MQ
- 【angular】组件:@Input() @Output() 输入属性和输出属性以及中间人模式的使用 (一)
- WIFI模块ESP8266的使用指南(客户端和服务器两种模式建立)
- 关于DDD:管理"工作单元实例"的两种模式的使用方法
- OIS输入系统-1_OIS简介与使用----OIS几个重要的类的使用
- Ogre笔记八:基础教程五—缓冲输入
- ogre中缓冲(buffered)输入方式和非缓冲(unbuffered)输入有什么区别?
- Ogre基础教程4:监听器类与无缓冲输入处理