大佬,我也拜托你先玩下游戏再评论…如果不做到真正同步我敢上线?
那请问怎么实现的物理步长同步的,比如服务器同步客户端物理步长数100,客户端执行完100停顿?
两个问题,1、物理引擎如何指定模拟步长数量。2、这样物理模拟是否经常容易卡顿
第一个读下引擎源码很快就知道,mainLoop里面把PhysicsManager抽离出来单独update
第二个比较麻烦,主要就是靠剥离逻辑和表现…逻辑层再怎么卡表现层也要看上去平顺
理解,赞一个!表现层肯定用了缓存数据来做一些卡顿的缓冲,希望能够开放学习核心的逻辑demo大家学习:)
另外小游戏tcp协议的网络卡顿对物理帧同步的表现还是影响很大,我一直觉得物理同步游戏在小游戏上的体验是不能达标的,不知道你游戏这方面反馈如何
大佬,服务器发回的帧数据是直接step,还是放到队列里面由客户端定时step?
我跟朋友玩了下,出现了不同步,他都赢了,我才1:0
挺好玩的,就是这个方向有点反人类
大佬,能请问下你帧同步是怎么做的吗?游戏里边是用网络帧驱动还是客户端帧驱动的?
安卓和iOS 好友对战时候 不同步了;不过大佬UI做的不错啊
box2d是个确定性的物理引擎吗?你在不同系统测过了的吗?
没有特殊标注的引擎不可能是确定性引擎的,除非像Xbox、PS、Switch这种单平台的游戏
box2d 自己都不敢说是确定性引擎
一般都是加了随机数的,只要重置随机数就确定了,box2d源码没看,有物理引擎是这样的
box2d没有随机数,是浮点数据误差,同一台机子都有可能误差,可以参考确定性修改:https://github.com/jeason1997/Box2DSharp/tree/deterministic
他做的这种demo,有楞有角的碰撞,误差不明显,应该做球与球的碰撞,应为每个碰撞点的法线都会不同,误差的结果会越来越明显
其他语言不同步是因为不同设备浮点计算有误差,但是遵守 ES6 规定的平台浮点计算是一致的,所以不需要对浮点数做额外处理,我只能说有些人即使给他看了教程他也不明白
creator box2d不是wasm lib 吗,是c++写的,就算遵守 ES6 规定也是通常情况下相同,而不是所有情况相同,极少数情况下可能会出现细微的差别,就和css一样,都是标准规定,都是实现是有差异的
为了5%的不同步率开发30天,和为了95%的同步率开发3天,相信是个傻子都知道选择
浮点误差,在相同设备相同虚拟环境是不可能不同的,如果不同,就是有随机数的存在。
我尝试过球碰撞,没有随机数就没有误差。