关于update里面 this.node.y += this.speed.y * dt; 与帧率的问题的疑问?

  • Creator 版本:1.8
    官方的例子

    在update里面执行
    this.node.y += this.speed.y * dt;
    当用 cc.game.setFrameRate(30);//限制最大帧数
    与 帧率为60的时候,跳跃的高度是不一样的,
    限制在30帧的时候,跳跃的高度,比60帧的时候要高出挺多。这种要怎么处理呢。出现这种情况,那不是机器越烂,就越容易通关么。
    要怎么处理呢,这种情况。

跳跃是不是有个减速的过程,有减速的代码吗?

有减速的,你看下官网的 collider里的platform.fire这个例子。你就知道我说的是什么了。

没有大佬给个解决办法么

参考下这篇文章吧 https://www.gamasutra.com/blogs/ScottLembcke/20180404/316046/Improved_Lerp_Smoothing.php
有空我们更新下 example

https://github.com/cocos-creator/example-cases/pull/778
已经提交 PR 对脚本逻辑进行了修改,修改之前是在离开碰撞的时候让物体的速度受重力影响,但是实际上在跳跃状态开启的瞬间就拥有了初速度但是还未离开碰撞,这时候就会出现一帧的匀速运动,从而导致不同帧率在这一帧中的匀速运动距离不同而影响到跳跃的最高高度。同时修改之前物体的移动距离是使用 speed.y * dt 来算的,实际上和匀变速运动的距离会有差距。
综上,具体改动如下:
1、更改受重力影响的条件为跳跃状态开启时就影响。
2、更改 y 轴距离计算公式,采用匀变速运动的规律计算每次距离的改变量。
3、在赋速度初值的时候如果跳跃初始速度高于最高速度就将速度初值改为最高速度。
不是引擎的问题,是脚本逻辑的一些小细节的问题。