别说cocos做不了物理同步,几行代码助你轻松实现物理同步

找人合伙买一个,看下原理 :joy:

sixsixsixsixsixsix


ES6中在20.2.2章节,同样说了图中函数没有精确指定结果,所以在不同平台不同硬件上使用了图中函数计算的结果还是有可能不一致
那么排除这些函数的计算+固定dt,应该就没什么问题了

1赞

另外我在测试过程中,出现了两次不同步的状态,一次应该是楼主说的重启导致的,还有一次是手机卡住然后重连和电脑的不一致(电脑没卡顿),不知道是不是也是因为和重启有关

还是尽量把code时间挪到白天的好

大哥注意休息…出现不同步最好的判断方法就是刷新浏览器,重新演算一遍看能不能回到一样的状态。毕竟导致不同步的因素有很多,也有可能是我处理网络部分代码有bug…但绝对不是上面所说的每帧误差导致的。我只是想演示物理同步的可行性…而这也是我通过无数次测试才得出来的结论

这些函数里面包括sincos
既然使用这些函数有可能导致不一致这一点已经达成共识,接下来的问题就是如何不用这些三角函数实现本地物理碰撞计算 —— 这是不可能的,比如碰撞反弹和旋转计算都需要用到他们。

直接替换函数实现不行吗?规定函数实现,那么结果也会一致

还有我想问问楼主在网络波动的状态下,回滚状态是通过服务器状态同步还是客户端自己回滚到上一帧,以及提个建议。个人认为最好的demo是一个类似桌球的项目,给球一个力度让他在固定区域内撞击其他球,球永不销毁,这样才能比较好看出时间有没有对同步造成影响

不同步状态,全都是客户端按帧独立计算

不使用平台的三角函数,自己加实现确实可以解决问题,不知道楼主项目里是不是这么做的?@sixian

需要的1234

如果做了这些步骤,那么理论上没有就没有不同步的了,除非还有其他未知因素导致结果不一致,楼主的项目应该没啥毛病,虽然我没买:joy:

想要排除这些函数的计算,那就等于是在重新改造物理引擎了,但是看楼主的说法似乎并不是这么搞的。

别看了。。。看这个就是纸上谈兵,根本就不需要要使用任何函数,简单的四则运算,不同的机器结果都可能会不同,我是实际测出来过的。你们实锤一下再下结论的好。

举个简单的例子:
56/100 我遇到过有人的机器计算结果是0.5600000001
(大概是两三年前的时候测试过这块)

1赞

我上面还漏了一点,在部分架构不同的设备上面是会出现你说的这种情况,这里也有说明,因为部分架构扩展了浮点数精度,所以和最低要求精度的计算结果可能会有所不同,但是同架构的应该不会有这个问题

我当时测试时候用的是一台安卓魅族(好像是联发科的U),另一台是苹果,而且我发现并不是所有运算都有差异,当时测了好久,也只测出一两个实例(当然我没发现的肯定有)。

浮点数在不同硬件上是无法保证完全一致,但在很多硬件上又能相互一致,所以很难看出来问题,帧同步最难的不是技术流程,而是当发现不同步出现的时候怎么去fix,没有健壮的体系去支撑这个bugfix,只能说谁用谁知道。加油:)

我这边就浮点数精度问题,使用decimal计算,precision:9,然后mac机和安卓都会对不上,已经不相信js能做准确的小数计算了

而且刚刚就是mac机web上测试,简单的小数加法,出现了0.000002的误差导致判断出错,不得已把precision改到12才正常,我人都傻了,反正测试阶段,估计真机上卡到爆,后续再说吧,真的js感觉一点都不好用

1赞