详解cocos2d帧率FPS

来源:互联网 发布:服装记账软件 编辑:程序博客网 时间:2024/04/28 02:28

详解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++应该是差不多的

FPS实时显示于左上角

0 0
原创粉丝点击