关于OIS的输入

要开始考虑游戏输入的问题了,以及开始加入CEGUI也要考虑加入输入的问题。先把OIS的输入简单回忆一下。

OIS有两种输入模式:非缓冲输入以及缓冲输入。

无论用哪种输入方式,都应该有个输入设备管理器先,例如:(这代码仅仅是举例而已)

    在Ogre中的一个例子。。。。

    OIS::InputManager*                            m_pInputManager;

    size_t windowHnd = 0;

    std::ostringstream windowHndStr;

    OIS::ParamList pl;

    RenderWindow *win = m_pRoot->getAutoCreatedWindow();

    win->getCustomAttribute("WINDOW", &windowHnd);

    windowHndStr << windowHnd;

    m_pInputManager = OIS::InputManager::createInputSystem(pl);
非缓冲输入:

1、创建方式:其中 false 参数代表使用非缓冲模式

OIS::Keyboard* mKeyboard;

OIS::Mouse*     mMouse ;

mKeyboard = static_cast<OIS::Keyboard*>

(mInputManager->createInputObject(OIS::OISKeyboard, false));

mMouse = static_cast<OIS::Mouse*>

(mInputManager->createInputObject(OIS::OISMouse, false));

2、在监听帧中的用法:

bool frameStarted(const FrameEvent& evt)

{

mKeyboard->capture();

mMouse->capture();

if(mKeyboard->isKeyDown(OIS::XXXX))

{

}

}

使用方法比较简单,对帧监听器没有特殊要求(相对于缓冲方式)
缓冲输入:

1创建方式:其中 true参数代表使用非缓冲模式

mKeyboard = static_cast<OIS::Keyboard*>

(mInputManager->createInputObject(OIS::OISKeyboard, true));

mMouse = static_cast<OIS::Mouse*>

(mInputManager->createInputObject(OIS::OISMouse, true));

2、在监听帧中的用法:

首先,监听帧必须拥有回调的方法,就是说监听器应该这样:继承KeyListener,MouseListener

class ExitListener : public FrameListener,public OIS::KeyListener,public 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)

bool keyPressed(const OIS::KeyEvent &arg)

bool keyReleased(const OIS::KeyEvent &arg)

这些方法都是父类的纯虚接口,不得不实现他们。。正常运行时,发生事件后讲执行对应的函数。

要让这些函数起作用,还要做的事情是:

在 ExitListener 的构造函数(随便)中注册该类为回调类

mMouse->setEventCallback(this);

mKeyboard->setEventCallback(this);

最后,还要在每一帧更新输入

bool frameStarted(const FrameEvent& evt)

{

mKeyboard->capture();

mMouse->capture();

}

非缓冲输入以及缓冲输入使用效果的最大区别:

非缓冲能处理 键盘或者鼠标 按住的事件

缓冲不能处理 键盘或者鼠标 按住的事件

使用CEGUI时需要自己注入输入消息,使用缓冲模式条理比较清晰,处理比较简单。

在同一个游戏中是能同时存在缓冲以及非缓冲输入的!

Ogre 中使用OIS的两种模式的更多相关文章

  1. JSP中两种模式的总结

    运用JSP/Servlet实现的Web动态交互,主要采用: 模式一:JSP+JavaBean 链接:http://wxmimperio.coding.io/?p=155 模式二;JSP+Servlet ...

  2. 协议中UART的两种模式 【转】

    转自:http://wjf88223.blog.163.com/blog/static/3516800120104179327286/ ^^…… 协议栈中UART有两种模式:1.中断2.DMA 对于这 ...

  3. Spark中的两种模式

    两种模式 client-了解 cluster模式-开发使用 操作 1.需要Yarn集群 2.历史服务器 3.提交任务的的客户端工具-spark-submit命令 4.待提交的spark任务/程序的字节 ...

  4. Windows2003 IIS6.0支持32位和64位两种模式的设置方法

    IIS 6.0 可支持 32 位和 64 位两种模式.但是,IIS 6.0 不支持在 64 位版本的 Windows 上同时运行这两种模式.ASP.NET 1.1 只在 32 位模式下运行.而 ASP ...

  5. 【转】Reactor与Proactor两种模式区别

    转自:http://www.cnblogs.com/cbscan/articles/2107494.html 两种IO多路复用方案:Reactor and Proactor 一般情况下,I/O 复用机 ...

  6. ACE_linux:Reactor与Proactor两种模式的区别

    一.概念: Reactor与Proactor两种模式的区别.这里我们只关注read操作,因为write操作也是差不多的.下面是Reactor的做法: 某个事件处理器宣称它对某个socket上的读事件很 ...

  7. Doctype 严格模式与混杂模式-如何触发这两种模式,区分它们有何意义?

    Doctype:(Document Type)文档类型,它位于文档中最前面的位置,处于标签之前.如果你想制作符合标准的页面,一个必不可少的关键组成部分就是DOCTYPE的声明.确定了正确的Doctyp ...

  8. Android Studio的两种模式及签名配置

    我们使用Android Studio 运行我们的app,无非两种模式:debug和release模式. debug模式 debug模式使用一个默认的debug.keystore进行签名. 这个默认签名 ...

  9. vue-router的两种模式的区别

    众所周知,vue-router有两种模式,hash模式和history模式,这里来谈谈两者的区别. ### hash模式 hash模式背后的原理是`onhashchange`事件,可以在`window ...

随机推荐

  1. spring 拦截器简介

    spring 拦截器简介 常见应用场景 1.日志记录:记录请求信息的日志,以便进行信息监控.信息统计.计算PV(Page View)等.2.权限检查:如登录检测,进入处理器检测检测是否登录,如果没有直 ...

  2. Android笔记之获取显示器宽高

    原先的Display.getWidth().Display.getHeight()已废弃 推荐的获取Display宽高的方法如下 DisplayMetrics metrics = new Displa ...

  3. MongoDB 学习一

    这一章,我们先介绍几个MongoDB的概念: 1.document: 它是MongoDB的基础数据单元,它大概等价于关系型数据库中的行. 2.collection: 可以想象成动态的表. 3.一个简单 ...

  4. imagemap的推荐使用方法,前端自适应image maps库

    1.map在浏览器的兼容性相对来说是比较好的,这是我在项目中的一个处理方法 推荐到下面网站去画map http://imagemap-generator.dariodomi.de/ 2.画完去gith ...

  5. apache下实现301永久性重定向的方法

    因为博客是使用了www.php100.com作为博客域名,所以想实现php100.com全部重定向(跳转)到www.php100.com.同时按照google的建议,使用服务器端 301 重定向,为了 ...

  6. html5--3.5 input元素(4)

    html5--3.5 input元素(4) 学习要点 input元素及其属性 input元素 用来设置表单中的内容项,比如输入内容的文本框,按钮等 不仅可以布置在表单中,也可以在表单之外的元素使用 i ...

  7. HTML标签深入学习系列(1)——注释标签 <!-- -->

    一.HTML注释的语法 <!--注释内容--> 二.HTML注释的用处 1.普通注释(增强代码的可读性) 方便别人:方便其它程序员了解你的代码 方便自己:方便以后对自己代码的理解与修改等等 ...

  8. nyoj 86 --位标记

    nyoj 86 --位标记 点击打开题目链接 :                        找球号(一)  这道题目很多解法,其他解法请参考 http://www.cnblogs.com/play ...

  9. BZOJ_2901_矩阵求和_前缀和

    BZOJ_2901_矩阵求和_前缀和 Description 给出两个n*n的矩阵,m次询问它们的积中给定子矩阵的数值和. Input 第一行两个正整数n,m. 接下来n行,每行n个非负整数,表示第一 ...

  10. 微信小程序内嵌网页能力开放 小程序支持内嵌网页文档说明

    为了方便开发者灵活配置微信小程序,张小龙现在开放了小程序的内嵌网页功能,这是一个非常大的惊喜啊,以后意味着你只要开放一个手机端网站,就可以制作一个小程序了哦.操作方法1.开发者登录微信小程序后台,选择 ...