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;

}

posted @ 2014-10-16 10:13  mfrbuaa  阅读(180)  评论(0编辑  收藏  举报