手机刷新率120帧 在update里面写逻辑,会导致游戏加速,如果不处理 dt 有办法让 手机120帧和60帧的游戏速度一致吗

写代码耐心点,多思考额。这种明显看业务需求去处理的,和引擎没啥关系吧

进游戏时做一个 update 帧频检测,取5次DT值,如果和 1/帧频 偏差过大,则直接修改整个游戏的帧率。
这样改不用一个一个处理update

同意你的观点

我觉得这是纯新手问题,其他引擎的update也是每帧调用的,也会有一个间隔时间的参数

你的帖子已经被社区标记并被临时隐藏。

你的帖子已经被社区标记并被临时隐藏。

如果逻辑要求一定要保持60帧的话,还是做逻辑渲染分离吧,渲染帧其实是不靠谱的,没法做到你这样的要求,我记得unity也是只有fixupdate里才会保持固定帧率的。

最后附一个方案,临时想到的,楼主可以试试,按照我之前说的缩放dt,缩放值根据设定帧率和当前帧率而定,根据panda在这篇帖子说的应该可以得到实际帧率,在计算缩放值就好了,这样就不用修改update的代码,但是我觉得正常的方案应该是cc.game.setFrameRate

1赞

666 我也觉得 cc.game.setFrameRate 应该属于正常方案, 但是实际设置60 手机刷新是90 那还是90

不是引擎的问题,是你写在update 写逻辑而不用使用dt 的思路是错误的。
在其它引擎也没有这样的写法,你上面说的是需要固定帧率(在unity你可以使用 FixedUpdate),cocos的update不是固定帧率(其它引擎也是),如果你经常调试的话,会发现每帧的间隔不是严格相等,甚至在极端卡顿或者是设备性能低下的情况下update每秒只更新两三次,这种情况你怎么处理?

你说的游戏加速,是场景物体速度加快吧,建议你在update里这样写
let speed = 20;//每秒速度
let distance = sped * dt;
this.node.x += distance

如果你还是不想处理dt ,那只能使用一些不按常理的方法了,像上面直接修改帧率的,也是一种方法,但不是正常解决问题的思路。

移动速度相关的必须要有一个速度的概念,根据你的描述是没有的,建议你应该加上去。

请教问题戾气不能太重,工作也是,心平气和更好些

3赞

不是戾气太重,是因为有些个人就应该喷他

1赞

心平气和解决问题谁不喜欢呢,有些人就喜欢啥事不干,装个逼嘲讽一下,偏要来找下存在, 还不解决问题,这种人我能喷的他妈都不认识,但是解决问题的大哥,你怎么说都对。

1赞

遇到这样的人也没办法,还好我还没遇到过。

1赞

让dt参与逻辑运算.
如果需要FixedUpdate的效果则让

dt = 1 / cc.game.getFrameRate();

必须处理dt,比如我在项目中没有使用官方动画,比如moveto,都是update中持续批量修改position,不要那么多怨气,自己要有自己的一套办法,实在解决不了再来找引擎组……

其实你只是"错"在不解决问题,而不是"错"在嘲讽人,不解决问题你哪怕说的是安慰的话都可能像"放屁"

1赞

有用,多谢啦

  1. 引擎帧率设定 60 仍然是 90,有可能是 bug。但是如果设置成功,会导致游戏帧率不稳(和实际帧率不匹配)
  2. 手机帧率多大,引擎帧率就应该多大,除非特殊情况(在主界面或者无操作时,手动降帧,省电)
  3. 用 delta time 保持游戏效果的平稳,这是常规操作
  4. Fixed Update 适合用来处理逻辑,不适合用来处理表现。因为涉及到表现就需要尽可能平滑的帧率,可以考虑表现跑满帧,表现从前两个逻辑帧的结果插值而来。
  5. 最好是直接在手机系统里设置帧率为 60,可以引导用户设置,或者就特定机型通过系统 API 进行切换。

遇到过部分手机可以设置超频运行,会导致游戏整体加速,不仅Update变了 ,动画,物理引擎都发生变化

该主题在最后一个回复创建后14天后自动关闭。不再允许新的回复。