在Ogre中使用OIS的两种模式(非缓冲输入和缓冲输入)
来源:互联网 发布:大数据时代概念 编辑:程序博客网 时间:2024/05/01 14:25
一.非缓冲方式能处理鼠标或键盘长按的事件,实时性强
缓冲方式则不能长按事件,用于非实时响应。
非缓冲方式
步骤:
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 帧监听FrameListener、非缓冲输入和缓冲输入
- OGRE+OIS 帧监听FrameListener、非缓冲输入和缓冲输入
- OGRE+OIS 帧监听FrameListener、非缓冲输入和缓冲输入
- Ogre 中使用OIS的两种模式
- 使用缓冲输入流和缓冲输出流复制文件
- OIS 缓冲与非缓冲输入方式
- ogre中缓冲(buffered)输入方式和非缓冲(unbuffered)输入有什么区别?
- OIS输入
- OIS输入系统-1_OIS简介与使用----OIS几个重要的类的使用
- 关于Ogre自带输入系统OIS(Object-Oriented Input System)的源码分析
- CEGUI/OIS的中文输入与显示
- OIS输入系统
- OGRE 3D基础五:缓冲输入
- 菜鸟也学Ogre-缓冲输入
- Ogre基础教程5:有缓冲输入
- 无缓冲IO和缓冲IO
- Ogre笔记七:基础教程四—帧监听器和非缓冲输入
- 【转】RT3070驱动移植
- shellcode之二.Plus:victim漏洞提权实例
- 左偏树学习。
- 《Visual C# 最佳实践》第五章 泛型和集合类 (二):集合类
- IP地址的类别划分
- 在Ogre中使用OIS的两种模式(非缓冲输入和缓冲输入)
- zoj 2334 Monkey King(左偏树+并查集)
- myeclipse
- 百度竞价三则创意写法
- 《谢娜娱乐圈奋斗史:娜写年华》
- shellcode之二.Plus2:ret2libc实例
- 常用系统端口
- Teach Yourself Programming in Ten Years——用十年教会自己编程
- 2011-1-22