最近做一款类似台球游戏 一方操作上报发球点与方向,另一方接收到发球点与方向做镜像 然后发球 ,撞击多次后2边客户端运行轨迹有偏差 ? 请问大家怎么解决
用整数,不要用浮点数。
我上报的数据都是整形呀
直接算座标,做点对点补间动画就行
不要用游戏的物理引擎,自己处理碰撞。
撞击后还要做反射 这个也要自己处理?
额 你说的自己处理是指碰撞回调之后自己做反射然后重新赋予移动速度吗
关键是2个客户端数据同步
你碰撞是用的物理引擎还是游戏内的碰撞组件?你要多人游戏,这2个都不能用,因为他们不是 确定性 的。两次同样的输入不会得到相同的结果。不知道我说的你明白没有
如果计算中有浮点数,各机型都会有差异。这套碰撞只能自己写,然后使用定点数,去除浮点数差异。这样可以保证两边的结果一致。
使用的是物理引擎 我会给定2边相同速度与发球点方向然后结果就有差异了
现在2边客户端没有做数据校验 每次只给初始条件 然后让物理引擎跑 最后上报结果 发现偶尔会结果不同
上面几位说的都是正确的,
一般做多人游戏的时候,都会只把结果互传,
对面显示的就一定会跟本地同步
除非你的引擎是自已写的,
否则变数太多了
我们这边做的也是桌球游戏,并没有出现多人游戏路径不一致的情况。。。只要起始参数一致,路径就是一致的。

这是一个玩家的棋盘,
这是另外一个玩家的棋盘 发球坐标分别为x坐标-228发球Y坐标539发球方向(96.00, -486.00);
刚体在世界坐标下的线性速度 x轴:Vx= 194 y轴:Vy= -981
另一玩家发球x坐标228发球Y坐标-539发球方向(-96.00, 486.00)刚体在世界坐标下的线性速度 x轴:Vx= -194 y轴:Vy= 981
然后撞击产生数据 第5个小球的数据有偏差了
{“userTag”:11,“position”:{“x”:-228,“y”:539},“otherTag”:2,“collisionNumber”:1,“ballNum”:5},
{“userTag”:11,“position”:{“x”:-130.9998779296875,“y”:48.500732421875},“otherTag”:3,“collisionNumber”:2,“ballNum”:5},
{“userTag”:11,“position”:{“x”:-361.03643798828125,“y”:73.96209716796875},“otherTag”:6,“collisionNumber”:3,“ballNum”:5},
{“userTag”:11,“position”:{“x”:-29.951629638671875,“y”:112.60955810546875},“otherTag”:106,“collisionNumber”:4,“ballNum”:5},
{“userTag”:11,“position”:{“x”:19.7110595703125,“y”:118.40667724609375},“otherTag”:3,“collisionNumber”:5,“ballNum”:5},
{“userTag”:11,“position”:{“x”:-354.0077819824219,“y”:164.78363037109375},“otherTag”:6,“collisionNumber”:6,“ballNum”:5},
{“userTag”:11,“position”:{“x”:29.289520263671875,“y”:211.16058349609375},“otherTag”:3,“collisionNumber”:7,“ballNum”:5},
{“userTag”:11,“position”:{“x”:-181.69351196289062,“y”:234.3441162109375},“otherTag”:3,“collisionNumber”:8,“ballNum”:5},
{“userTag”:11,“position”:{“x”:101.5250244140625,“y”:268.19830322265625},“otherTag”:3,“collisionNumber”:9,“ballNum”:5},
{“userTag”:11,“position”:{“x”:11.482025146484375,“y”:280.6708984375},“otherTag”:3,“collisionNumber”:10,“ballNum”:5}
{“userTag”:10,“position”:{“x”:228,“y”:-539},“otherTag”:1,“collisionNumber”:1,“ballNum”:5},
{“userTag”:10,“position”:{“x”:130.99999999999955,“y”:-48.499999999999545},“otherTag”:3,“collisionNumber”:2,“ballNum”:5},
{“userTag”:10,“position”:{“x”:361.03835677949564,“y”:-73.95099361456062},“otherTag”:6,“collisionNumber”:3,“ballNum”:5},
{“userTag”:10,“position”:{“x”:29.951709289373866,“y”:-112.58271156147032},“otherTag”:107,“collisionNumber”:4,“ballNum”:5},
{“userTag”:10,“position”:{“x”:-19.7112878341444,“y”:-118.37746925350677},“otherTag”:3,“collisionNumber”:5,“ballNum”:5},
{“userTag”:10,“position”:{“x”:354.01026482229054,“y”:-164.73553078979808},“otherTag”:6,“collisionNumber”:6,“ballNum”:5},
{“userTag”:10,“position”:{“x”:-29.30924181043656,“y”:-211.09359232608836},“otherTag”:3,“collisionNumber”:7,“ballNum”:5},
{“userTag”:10,“position”:{“x”:181.93174288648095,“y”:-232.12988466224425},“otherTag”:3,“collisionNumber”:8,“ballNum”:5},
{“userTag”:10,“position”:{“x”:-102.0878517536629,“y”:-262.8137133638055},“otherTag”:3,“collisionNumber”:9,“ballNum”:5},
{“userTag”:10,“position”:{“x”:354.14112318251955,“y”:-309.64692559250426},“otherTag”:6,“collisionNumber”:10,“ballNum”:5}
因为做了镜像所以2 方玩家数据为相反数
确实是 有没有好的解决方法
有代码吗 可以参考一下
