zoukankan      html  css  js  c++  java
  • 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;

    }

  • 相关阅读:
    如何重启apache2服务
    ubuntu设置不睡眠的方法
    linux环境下安装varnish
    PHP 开发者该知道的 5 个 Composer 小技巧
    dl, dt, dd /line-height /loat /vertical-align 问题
    针对老式浏览器(主要是IE6、7、8)的css3-mediaqueries.js自适应布局
    三栏网页宽度自适应布局方法
    vue.js开发环境搭建
    vue.js之个人总结
    less学习:基础语法总结
  • 原文地址:https://www.cnblogs.com/mfrbuaa/p/4028142.html
Copyright © 2011-2022 走看看