Ogre 中使用OIS的两种模式
来源:互联网 发布:医疗软件行业趋势 编辑:程序博客网 时间:2024/05/21 18:40
关于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时需要自己注入输入消息,使用缓冲模式条理比较清晰,处理比较简单。
在同一个游戏中是能同时存在缓冲以及非缓冲输入的!
要开始考虑游戏输入的问题了,以及开始加入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时需要自己注入输入消息,使用缓冲模式条理比较清晰,处理比较简单。
在同一个游戏中是能同时存在缓冲以及非缓冲输入的!
0 0
- Ogre 中使用OIS的两种模式
- 在Ogre中使用OIS的两种模式(非缓冲输入和缓冲输入)
- OGRE中OIS与CEGUI的屏幕坐标转换
- OGRE中OIS与CEGUI的屏幕坐标转换
- OGRE中OIS与CEGUI的屏幕坐标转换
- OGRE+CEGUI+OIS 鼠标非独占使用
- OGRE使用OIS鼠标不准确问题
- 关于Ogre的OIS的一些资料
- Ogre + MFC + OIS
- OGRE+CEGUI+OIS 完美解决鼠标非独占使用
- OGRE+CEGUI+OIS 完美解决鼠标非独占使用
- OGRE+CEGUI+OIS 完美解决鼠标非独占使用
- OGRE+CEGUI+OIS 完美解决鼠标非独占使用
- OIS几个重要的类的使用
- OIS输入系统-1_OIS简介与使用----OIS几个重要的类的使用
- 关于Ogre自带输入系统OIS(Object-Oriented Input System)的源码分析
- OGRE+OIS+CEGUI解决双鼠标问题
- OGRE error LNK2005 OIS 重定义
- WinCE BSP的BIB文件介绍
- ipad iphone model 让 键盘消失
- CvArr、Mat、CvMat、IplImage、BYTE转换(总结而来) .
- 广州传智播客—牛逼网页设计师的打造所
- 关于WinCE中config.bib的问题
- Ogre 中使用OIS的两种模式
- google diff python API 使用
- wince bib文件合成
- Qt多窗体之间的数据库操作
- wince6.0编译命令分析
- Nenux 5刷机
- (六)Brute-Force算法与KMP算法
- testaaaaaaaaaaaa
- Android 双击返回键退出程序 实现