zoukankan      html  css  js  c++  java
  • Ogre 学习笔记 (一) 处理用户的输入事件 OIS

    Ogre 是使用 OIS 这个开源的输入框架来处理用户的键盘或鼠标事件的。

    需要引入 OIS.h 头文件

    #include "OIS.h"

    int main()

    {

      Ogre::Root* root = new Ogre::Root("plugins_d.cfg");

      // 创建我们的主窗口

      Ogre::RenderWindow* window = root->initialise(true,"My Ogre Render Window");

      // 首先需要创建一个InputManager对像的指针,它来负责管理所有的输入事件

      // 使用 OIS::InputManager::createInputSystem(size_t winHandle); 方法。它需要用户提拱一个窗口的句柄,也就是告诉OIS。这个输入系统是为哪个窗口服务的。 

      size_t winHnd;

      // 我们使用 RenderWindow 的 getCustomAttribute() 方法来得到这个主窗口的句柄.

      window->getCustomAttribute("WINDOW",&winHnd);

      // OK .  这样我们就可以创建一个做用为 window窗口的 输入系统了。

      OIS::InputManager Input = OIS::InputManager::createInputSystem(winHnd);

      // 使用这个输入 系统创建 键盘输入处理物体

      OIS::Keyboard* keyboard = static_cast<OIS::Keyboard*>(Input->createInputObject(OIS::OISKeyboard,false));

      // 创建鼠标处理物体 

      OIS::Mouse* mouse = static_cast<OIS::Mouse*>(Input->createInputObject(OIS::OISMouse,false));

      // 渲染

      while(!window->isClosed()) {

        // 得到键盘事件,当按下 Escape 时,关闭主窗口.

        keyboard->capture();

        if (keyboard->isKeyDown(OIS::KC_ESCAPE))

          window->destroy();

        // 渲染一帧

        root->renderOneFrame();

        // 处理其它事件

        Ogre::WindowEventUtilities::messagePump();

      }

      return 0;

    }

    注意: 你可以将N个 FrameListener 加入在Root中。 不过。。。。 你不能在每个 FrameStarted 的代码段里都加入 mouse->capture(). 这样。只会有一个 Listener的Mouse事件被运行。 你可需要在第一个加入 capture() 即可。 其它的Listener中 就不需要加了。

  • 相关阅读:
    如何更改Web Service部署生成的App_Code.dll的名称
    Orcas中C#语言的新特性:自动属性,对象初始化器,和集合初始化器
    驗證類javascript
    多线程下WinForm开发应该注意哪些问题?
    把表从Access2007导出到Sql Server
    面向对象模型的四种核心技术
    ASP常用代碼二
    熊猫烧香代码
    简繁体互转代码
    上班人员必读:“五险一金”详解!
  • 原文地址:https://www.cnblogs.com/easyfrog/p/2845763.html
Copyright © 2011-2022 走看看