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

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

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

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

intApplication::run()

{

if(!applicationDidFinishLaunching())

{

return1;

}

longlastTime =0L;

longcurTime =0L;

autodirector =Director::getInstance();

autoglview = 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();

return0;

}


voidApplication::setAnimationInterval(doubleinterval)

{

_animationInterval= interval*1000.0f;

}

相关文章

    本文实践自 RayWenderlich、Ali Hafizji 的文章《...
Cocos-code-ide使用入门学习地点:杭州滨江邮箱:appdevzw@1...
第一次開始用手游引擎挺激动!!!进入正题。下载资源1:从C...
    Cocos2d-x是一款强大的基于OpenGLES的跨平台游戏开发...
1.  来源 QuickV3sample项目中的2048样例游戏,以及最近《...
   Cocos2d-x3.x已经支持使用CMake来进行构建了,这里尝试...