【Box2D碰撞】不同客户端碰撞不同步

如题,总结一下在论坛看到的方法:

  1. 修改Box2D中的三角函数,改为查表法
  2. 修改Box2D中的乘除运算(自己理解的,不知道还有其他什么运算会引起浮点误差),改为用可以设定精度的数学库,如Big.js
  3. 配合状态同步,在关键点同步状态(但是物理引擎造成桌面不统一,同步的时候会有很大变动)
  4. 修改box2d中某个函数的步长为定值
  5. 降低游戏帧率

目前1345都做了,感觉是有很大提升的,但在进行多次碰撞的时候仍然会有误差,误差会随着碰撞次数的增加而积累扩大。

想问下这些做法是否正确,以及方法2的具体做法。另外有其他方法的也烦请告知。

1赞

111;;来来来

一般是连续几次碰撞,误差就能看出来,而且要求速度比较快,较慢的时候还是没事

状态同步咋做到的。
端与端之间得到的状态应该不同吧。
同步的数据是啥。

5感觉也不可行啊。降低帧率只是降低了计算次数。
多次之后一样有问题吧。

124感觉应该可以。每次都做定值的话,不应该有差距吧。
我没做过这个同步。只是我自己的看法。

2 看看有没有定点数的库

你有用到刚体吗.我现在做3d 的项目 误差更大

同步要自己写碰撞检测的,不能用引擎自带的刚体,因为浮点数导致计算结果不一致。

cocoscreate2.1.3以上的版本的节点位置信息在原生平台会有精度损失。

改状态同步吧,帧同步太痛苦

谢谢,降低帧率确实没什么用。

这个应该只替换乘除法就可以了吧?

用到了,误差很大,但是竞品0误差,用的也是cocos

这个能确定吗?如果可以确定我就换回老版本

台球游戏,状态没法同步,就得自己写物理引擎了

你咋知道竞品是用的帧同步呀

测试代码在原生平台运行查看输出
this.node.setPosition(cc.v2(0.1, 0.1));
console.log(this.node.x, this.node.y);

思路可能不对;状态同步 或者 自己写写圆形碰撞

服务器计算,前端只是同步下服务器的数据就可以了

感觉逻辑应该写在服务器,客户端只负责渲染。:3:

糖豆人是怎么同步的啊?