详解cocos2d帧率FPS
最近在使用coco2d-js写一个游戏的时候,需要将帧率实时显示出来,
于是搜索了一下,获得FPS有下面几个方法:
cc.director.getAnimationInterval()
cc.director.getSecondsPerFrame()
但是,这两个方法都有点问题
getAnimationInterval()只会返回你设定好的FPS帧率,即project.json里的frameRate值,不会随着实际帧率而变化
getSecondsPerFrame()方法返回的是每帧的秒数,按说其倒数就是实际的帧率,然而其根据cocos的算法,往往很小,用1除以这个数值会经常出现大数值的越界.
然后我就想到,在cocos2d的调试模式下,有三行数值,其中就有FPS:
然后我去找这个帧率是怎么计算的,在CCDirector.js中,有个变量
_frameRate,这个数值保留一位小数就是这个Label的值,源码如下:
this._frameRate = this._frames / this._accumDt;
this._FPSLabel.string = this._frameRate.toFixed(1);
也就是说在我们的js中直接获得
var fps = cc.director._frameRate
获得这个数值就可以把帧率的显示变好看一点了,然后我想把默认的这三行隐藏,于是写了这一行:
cc.director.setDisplayStats(false)
但是这样,cc.director._frameRate的值就一直是0了,那是因为
DisplayStats是false后cocos就不会实时计算FPS了,所以不能设为false,而是只让三个label不显示就行了,于是,在CCDirector.js的 _showState()函数 中,将这三行注释掉:
this._FPSLabel.visit();
this._SPFLabel.visit();
this._drawsLabel.visit();
结果就可以把fps显示到任何地方,这是js的写法,我想C++应该是差不多的