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

前端之家收集整理的这篇文章主要介绍了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;

}

猜你在找的Cocos2d-x相关文章