Cocos2d-x3.2游戏的核心循环在Application,如何处理FPS不稳

今天天气很阴,马上要下雨了,陈吃早点功夫写点东西,

一场秋雨一场寒,十场秋雨要穿棉,各位从今往后多穿点

int Application::run()

{

    if(!applicationDidFinishLaunching())

    {

        return 1;

    }

    

    long lastTime = 0L;

    long curTime = 0L;

    

    auto director = Director::getInstance();

    auto glview = director->getOpenGLView();

    

    // Retain glview to avoid glview being released in the while loop

    glview->retain();

    //看到了吗,其实所有游戏就在这个循环中

    while (!glview->windowShouldClose())   //如果没退出,比如用户按下了home 就退出了

    {

        lastTime = getCurrentMillSecond();  //获取当前系统时间

        director->mainLoop();                          //1.处理游戏绘图和游戏逻辑

        glview->pollEvents();                           //2.处理游戏交互

                                                                                                                 

        curTime = getCurrentMillSecond();   //3.以上1.2必定要消耗一定的时间而且动画和怪物越多可能耗时越大所以curTime - lastTime就是这次计算消耗的时间

        if (curTime - lastTime < _animationInterval) //如果curTime - lastTime < _animationInterval 

                                                                                          //说明在60/1秒内完成了这一帧的计算再让cup sleep FPS剩下时间来保证帧率的稳定

        {

            usleep(static_cast<useconds_t>((_animationInterval - curTime + lastTime)*1000));

        }

       /如果想知道游戏中是否有不稳定如何呢? 加入如下代码

      else

     {

        //........

     }

    }

/你明白了吗 亲

    /* Only work on Desktop

    *  Director::mainLoop is really one frame logic

    *  when we want to close the window, we should call Director::end();

    *  then call Director::mainLoop to do release of internal resources

    */

    if (glview->isOpenGLReady())

    {

        director->end();

        director->mainLoop();

    }

    

    glview->release();

    

    return 0;

}


void Application::setAnimationInterval(double interval)

{

    _animationInterval = interval*1000.0f;

}

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值