在Ogre中使用OIS的两种模式(非缓冲输入和缓冲输入)

转载 2011年01月22日 15:14:00
在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笔记七:基础教程四—帧监听器和非缓冲输入

非缓冲输入,个人觉得不怎么好用,但是在某些特殊场景下可能会有大用。 首先,我们了解一下这一节教程想实现个什么东西: 我们将把一个忍者放到屏幕中,并在场景中加上点光源。 当你点击鼠标左键,灯光会打...

Ogre基础教程5:有缓冲输入

介绍利用OIS的有缓冲输入。 设置场景 对有缓冲输入的介绍 键盘监听器以及交互 鼠标监听器交互 为摄像机定位设置场景节点 注册监听器 捕获输入状态 处理输入事件 改变视点 摄像机运动...

Ogre笔记八:基础教程五—缓冲输入

没太多好说的,这一章要实现的目标跟上一章一样,但是用到的方法相比较而言高级一点,我懒得解释直接复制教程里的。 缓冲输入的介绍:       在上一次课里,我们使用的是无缓冲的输入,也就是说,在每一...

Ogre基础教程4:监听器类与无缓冲输入处理

Ogre 基础教程 4 监听器与无缓冲输入

关于Ogre自带输入系统OIS(Object-Oriented Input System)的源码分析

在看Ogre源码的时候注意到了这个开源的输入系统OIS,全称是Object-Oriented Input System。 好像我看到有人称为 Open Input System,不管叫什么总之还挺好...

第21天 输入字符流、输出字符流、缓冲字符流、装饰者模式

输入字节流 ----------| InputStream 输入字节流的基类 抽象类 -------------|FileInputStream 读取文件数据的输入字节流。 -----------...

我的字符缓冲输入流(装饰设计模式)

装饰设计

the c programing language 1-22 较长输入行折成短些的多行,非缓冲方式实现

/*  * K&R2 1-21  * Author: Donmmi  * Email:teddy_liu@live.com * 程序说明: 代码核心部分:折行后的当前行长度为未输出...

使用缓冲流读取试题文件,每次显示试题文件中的一道题目。读取到字符“*”时候暂停读取,等待用户从键盘输入答案。用户做完全部题目后,程序给出用户的得分。Test.txt如下:

題目內容: 使用缓冲流读取试题文件,每次显示试题文件中的一道题目。读取到字符“*”时候暂停读取,等待用户从键盘输入答案。用户做完全部题目后,程序给出用户的得分。Test.txt如下: ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)