Advanced Ogre Framework中的两个小瑕疵

错误一:很不值得一提的一个小错误,但是毕竟也是一个错误,作者在GameState退出时没有将Current_Object指针置空,导致在返回MenuState之后,如果再次进入GameState,点击一下鼠标左键这段代码就会发作:

    if(m_pCurrentObject)

    {

        m_pCurrentObject->showBoundingBox(false);

        m_pCurrentEntity->getSubEntity(1)->setMaterial(m_pOgreHeadMat);

    }

导致程序中断跳出。

所谓“常在河边走,哪能不湿鞋”,对待蕴含着强大力量的指针,初始化和释放工作一定要慎之又慎。

解决方案:在GameState::exit()函数末尾补一句m_pCurrentObject=NULL就好了。

 

 

错误二:这个错误比较严重,但是不在advanced framework中添加新功能(尤其是骨骼动画)你却根本看不出来。在advanced framework中,并没有继承framelistener这个类,关于timeSinceLastFrame的计算,是通过Ogre的计时器实现的。

我们来看AppStateManager::start()这个函数:

//while循环中:

{

startTime = OgreFramework::getSingletonPtr()->m_pTimer->getMillisecondsCPU();//绘制一帧之前记录开始时间 OgreFramework::getSingletonPtr()->m_pKeyboard->capture(); OgreFramework::getSingletonPtr()->m_pMouse->capture();

m_ActiveStateStack.back()->update(timeSinceLastFrame);// GameState or MenuState or PauseState更新

OgreFramework::getSingletonPtr()->updateOgre(timeSinceLastFrame); OgreFramework::getSingletonPtr()->m_pRoot->renderOneFrame();//画一帧 timeSinceLastFrame = OgreFramework::getSingletonPtr()->m_pTimer->getMillisecondsCPU() - startTime;//计算画一帧花费的时间

}

注意代码中,计算时间的单位:Milliseconds!!!毫秒!

现在我们看getMillisecondsCPU()的返回值是什么? unsigned long!为了用整型计算替代浮点运算以加速,这个函数返回的根本不是毫秒,而是毫秒的一千倍整数!传递这样的参数将使你的程序状态加速1000倍!

解决方案:update(timeSinceLastFrame *1.0 /1000);

       updateOgre(timeSinceLastFrame*1.0 /1000);

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值