【Ogre编程入门与进阶】第七章 帧监听与用户输入

在这一章中我们将学习一个非常重要的概念:帧监听,我们将和大家一起学习怎样使用帧监听的功能去对每一帧需要更新的内容更新,另外,我们还会学习怎样使用前面我们提到过的OIS的输入系统。

帧监听

       这一小节我们同样使用前面我们已经定义好的模板代码,不过我们需要做些许改动,我们知道我们定义的那个Example1类,我们让它继承了ExampleApplication类,但我们也知道C++支持多继承,因此现在我们让它再继承一个类FrameListener,因为这里封装了我们需要的所有帧监听的操作,继承这个类之后我们需要重写几个FrameListener中定义的虚函数,以便我们可以对每帧的更新操作进行控制,下面是继承了FrameListener并重写了对应的函数后的完整代码:

第一步:

#include <windows.h>

#include "ExampleApplication.h"

 

class Example1 : public ExampleApplication,public Ogre::FrameListener

{

public:

     void createScene()

     {

     }

 

     bool frameStarted(const FrameEvent& evt)

     {

         return true;

     }

     bool frameRenderingQueued(const FrameEvent& evt)

     {

         return true;

     }

     bool frameEnded(const FrameEvent& evt)

     {

         return true;

     }

protected:

private:

};

 

INT WINAPI WinMain( HINSTANCE hInst, HINSTANCE, LPSTR strCmdLine, INT )

{

     Example1 app;

     app.go();

     return 0;

}

第二步:完成上面的代码后,我们给Example1类新添加一个成员变量,如下所示:

private:

     Ogre::SceneNode*m_Node;

第三步:添加Example1的一个构造函数,把我们新添加的成员变量m_Node初始化为NULL:

Example1()

{

     m_Node = NULL;

}

第四部:向frameStarted成员函数中添加如下代码:

bool frameStarted(const FrameEvent& evt)

{

     if (m_Node)

    {

        m_Node->translate(Ogre::Vector3(0.1,0,0));

    }

     return true;

}

第五步:给Example1类新增加一个createFrameListener的函数,这个函数和前面我们提到过的createCamera已经createViewports等函数一样,都是在ExampleApplication中定义的虚函数:

void createFrameListener()

{

     mRoot->addFrameListener(this);

}

 

第六步:我们在createScene函数中添加一个实体,并实例化m_Node,以便我们能看到效果:

void createScene()

{

     Ogre::Entity*ent = mSceneMgr->createEntity("Sinbad","Sinbad.mesh");

     m_Node = mSceneMgr->getRootSceneNode()->createChildSceneNode();

     m_Node->setScale(10.0f,10.0f,10.0f);

     m_Node->attachObject(ent);

}

到此为止帧监听的大部分工作我们已经完成,我们可以编译并运行程序,我们会看到场景中有个人物不断的向右移动。但是请读者朋友注意,一旦我们运行这个程序,我们“很难”将其真正关闭,之所以这样说是因为我们并没有对退出当前的应用程序做任何处理,因此,你将会发现当我们像

  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值