2 study wuwenyao study_wuwenyao 于 2014.09.20 10:44 提问

关于cocos2dx帧率设置的问题:为什么帧率设置无效?

大家好,我这里刚刚接触cocos2dx。有个疑问请教下。
我用的版本是2.2.5,平台win7,VS版本10.
在hello world中有如下代码
// 打开fps显示

pDirector->setDisplayStats(true);

// 设置fps帧率

pDirector->setAnimationInterval(1.0/60);

我在尝试修改帧率的时候发现,如果我将帧率设置为大于60.那么这个设置将不会起作用。
进入setAnimationInterval函数。根据逻辑可知变量m_dAnimationInterval应该是确定帧率的控制变量。查找变量得到如下结果
\"\"\\"\\"\"\"
分别进入各个查找结果,发现只有第一处和第三处有对m_dAnimationInterval进行修改。第一处根据代码来看应该是设置默认值。理论上来讲当调用setAnimationInterval后它设置的值应该是被修改为最新的指定值了的。线索到此处断开。没有找到cocos是如何控制帧率的。然后我进入setDisplayStats函数,试图找到fps显示到界面的地方。从这里找到一些线索。进入函数后找到如下代码
inline void setDisplayStats(bool bDisplayStats) { m_bDisplayStats = bDisplayStats; }
判断m_bDispalyStats应该是控制开关,查找之。最后找到一个void CCDirector::showStats(void)函数,确定此处是控制显示帧率的地方。并确定显示帧率的代码如下
sprintf(m_pszFPS, \\\\"%4lu\\\\", (unsigned long)g_uNumberOfDraws);

            m_pDrawsLabel->setString(m_pszFPS);

确定全局变量 g_uNumberOfDraws就是帧率,查找找到如下带参数宏
#define CC_INCREMENT_GL_DRAWS(__n__) g_uNumberOfDraws += n
通过宏进行查找,得到如下结果
\"\"\\"\\"\"\"
到这里可以得出大概结论,每当做一次绘制(什么绘制我不知道,只是从名字上推断应该是绘制)帧数+1.
但是到达这里后我再次找不到线索。所以我走不下去了。。特来此请教
Q1:m_dAnimationInterval是如何控制帧率的?
Q2:为什么我设置帧率大于60后设置无效?
补充说明:因为我的电脑是x250CPU+NVIDIA GEFORCE 7025/NVIDIA NFORCE 630a 显卡,最开始我怀疑是硬件影响,然后我进入init函数删除所有的渲染。。但是还是帧率大于60设置无效。基本排除硬件影响。

3个回答

XiGuaLeslie
XiGuaLeslie   2015.02.12 11:38

pDirector->setAnimationIterval(每帧显示所用的时间)

u014558951
u014558951   2015.03.27 14:00

因为手机屏幕的刷新率就是60Hz,这个是LCD上芯片控制的,也就是设备驱动控制的,当然这个芯片的刷新是可以改的,不过一般都设置为60Hz

u014558951
u014558951   2015.03.27 14:00

因为手机屏幕的刷新率就是60Hz,这个是LCD上芯片控制的,也就是设备驱动控制的,当然这个芯片的刷新是可以改的,不过一般都设置为60Hz

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
关于cocos2dx帧率补偿的小方法
1.使用setAnimationInterval(1.0 / 15)?发现在Android上运行没效果了吧!好的,那就去官方Github[https://github.com/cocos2d/cocos2d-x/blob/1643c29a000d2e6720a2eb36e118ed7461487473/cocos/platform/android/java/src/org/cocos2dx/l
详解cocos2d帧率FPS
详解cocos2d帧率FPS最近在使用coco2d-js写一个游戏的时候,需要将帧率实时显示出来, 于是搜索了一下,获得FPS有下面几个方法:cc.director.getAnimationInterval() cc.director.getSecondsPerFrame()但是,这两个方法都有点问题getAnimationInterval()只会返回你设定好的FPS帧率,即project.jso
Cocos2d-x 修改Android平台帧率fps - 解决游戏运行手机发热发烫问题
使用Cocos2d-x 3.0开发游戏之后,发现游戏在android手机上发热非常严重,在魅族2上,几乎担心手机会爆炸了~~~采取的一个措施就是降低帧率,因为游戏对于帧率要求不是非常高。 做过cocos2d开发的同学应该都知道在win32平台修改帧率的方式非常简单,就是在AppDelegate.cpp文件中修改: 1 director->set
cocos lua 中, 动画文件让其调到指定的帧数
local function  aniBack(frame)          -- body         if(frame == nil) then  return end;          local event = frame:getEvent();          release_print(tostring( event ));            
Cocos2d-x 中获取动画当前帧数
Cocos2d-x 中获取动画当前帧数 DionysosLai 2014-4-17          在游戏中有很多动画,这些动画设计的好坏,对游戏的体验性影响很大。比方说敲打类动作,如果敲打动作比较多,我们在动作结束后,在处理敲击结果,游戏就给用户感觉很迟钝,有延迟现象。因此,这类动作,我们不能在动作结束后,再处理,而是应该在动作过程中进行处理。这里就考虑到了获取动画当前帧数问题。    
cocos2dx 更改帧频
auto director = Director::getInstance(); //30位更改后的帧频 cocos工程默认为60 这里调低了帧频 director->setAnimationInterval(1.0 / 30);
Unity3D显示帧率以及设置不限制帧率
using UnityEngine; using System.Collections; public class Fps : MonoBehaviour { float updateInterval = 0.5f; private float accum = 0.0f; private
读视频时,帧率的设置
读视频时,帧率的设置
Unity 游戏帧率优化,设置分辨率
帧率低的奇怪问题在优化游戏的时候遇到了一个奇怪的问题,经过一轮的优化之后,游戏的CUP占用率和内存使用都在正常范围(用腾讯cube 或者UWA),在profile 中也没有毛刺,在部分android手机上能流畅运行。但是在某些大屏幕的手机上FPS特别低,在一部4核心CUP、4G内存的Oppo手机上帧率不到23FPS ,但是在小米2上运行反而特别流畅。进过一系列的排查和试验,某些标榜为高端机的手机,手
unity设置游戏帧率
Application.targetFrameRate = 30; Application.targetFrameRate = -1; //不限坑Application.targetFrameRate 是用来让游戏以指定的帧率运行,如果设置为 -1 就让游戏以最快的速度运行。 但是 这个 设定会 垂直同步 影响。 如果设置了垂直同步,那么 就会抛弃这个设定 而根据 屏幕硬件的刷新速度来运行