Ogre 中使用OIS的两种模式
关于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的两种模式的更多相关文章
- JSP中两种模式的总结
运用JSP/Servlet实现的Web动态交互,主要采用: 模式一:JSP+JavaBean 链接:http://wxmimperio.coding.io/?p=155 模式二;JSP+Servlet ...
- 协议中UART的两种模式 【转】
转自:http://wjf88223.blog.163.com/blog/static/3516800120104179327286/ ^^…… 协议栈中UART有两种模式:1.中断2.DMA 对于这 ...
- Spark中的两种模式
两种模式 client-了解 cluster模式-开发使用 操作 1.需要Yarn集群 2.历史服务器 3.提交任务的的客户端工具-spark-submit命令 4.待提交的spark任务/程序的字节 ...
- Windows2003 IIS6.0支持32位和64位两种模式的设置方法
IIS 6.0 可支持 32 位和 64 位两种模式.但是,IIS 6.0 不支持在 64 位版本的 Windows 上同时运行这两种模式.ASP.NET 1.1 只在 32 位模式下运行.而 ASP ...
- 【转】Reactor与Proactor两种模式区别
转自:http://www.cnblogs.com/cbscan/articles/2107494.html 两种IO多路复用方案:Reactor and Proactor 一般情况下,I/O 复用机 ...
- ACE_linux:Reactor与Proactor两种模式的区别
一.概念: Reactor与Proactor两种模式的区别.这里我们只关注read操作,因为write操作也是差不多的.下面是Reactor的做法: 某个事件处理器宣称它对某个socket上的读事件很 ...
- Doctype 严格模式与混杂模式-如何触发这两种模式,区分它们有何意义?
Doctype:(Document Type)文档类型,它位于文档中最前面的位置,处于标签之前.如果你想制作符合标准的页面,一个必不可少的关键组成部分就是DOCTYPE的声明.确定了正确的Doctyp ...
- Android Studio的两种模式及签名配置
我们使用Android Studio 运行我们的app,无非两种模式:debug和release模式. debug模式 debug模式使用一个默认的debug.keystore进行签名. 这个默认签名 ...
- vue-router的两种模式的区别
众所周知,vue-router有两种模式,hash模式和history模式,这里来谈谈两者的区别. ### hash模式 hash模式背后的原理是`onhashchange`事件,可以在`window ...
随机推荐
- Android 四大组件学习之BroadcastReceiver一
本节课学习四大组件最后一个, 广播接受者. 顾名思义广播接受者就是接受广播呗.比方在现实社会中,曾经每一个人家都有一台收音机,这可就能够去接受广播发出来的消息.大家都知道.程序世界也是參照的显示生活设 ...
- jquery 备忘笔记
1.选择器 a.查询所有以某字符串开头的元素 $("input[id^='dgItem_txt']") b.获取一组单选按钮中选中的值 $("input[name='it ...
- 基于XML配置的Sping AOP详解
一.编写基本处理方法 package com.kang.sping.xml.aop; public class Math{ //加 public int add(int n1,int n2){ int ...
- 九度OJ 1097:取中值 (中值)
时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:5092 解决:1411 题目描述: 存在两组数组,和4个数字a,b,c,d,要求做如下操作,将第一个数组第a个数到第b个数,第二个数组的第c ...
- tomcat安装后问题解决
tomcat安装后问题解决 (1)tomcat无法正常启动的原因分析 JAVA_HOME 配置错误,或者没有配置 如果你的机器已经占有了8080 端口,则无法启动, 解决方法 (1) 你可以808 ...
- jQuery局部动态刷新
AJAX 是与服务器交换数据的艺术,它在不重载全部页面的情况下,实现了对部分网页的更新. 在做项目的过程当中要用到jQuery动态刷新获取数据,上网查了一番教程,讲此知识点的教程很多,但个人感觉比较乱 ...
- UIView封装动画--iOS 利用系统提供方法来做弹性运动
iOS 利用系统提供方法来做弹性运动 /*创建弹性动画 damping:阻尼,范围0-1,阻尼越接近于0,弹性效果越明显 velocity:弹性复位的速度 */ [UIView animateWith ...
- spring事件广播
可参考:http://www.cnblogs.com/atyou/archive/2013/01/07/2850106.html 其中的类图更是精彩,现截至如下:
- SDUT OJ 2088 refresh的停车场
refresh的停车场 Time Limit: 1000ms Memory limit: 65536K 有疑问?点这里^_^ 题目描述 refresh最近发了一笔横财,开了一家停车场.由于土地 ...
- 科目三靠边停车难度升级,超过50cm不合格怎么破?
驾考新规实施了几天,考过的学员普遍反映科目三难度升级,其中靠边停车项目的扣分点细化之后,一不小心就会不合格.新规以前靠边停车不压线就好了,新规之后,车辆距离马路右侧边缘线超过50cm就要扣100分,对 ...