【源码分享】帧同步框架DEMO之 nodejs版

看大佬一席话比看那些视频明白多了。

markmark

数据包里面只有整数,发送的时候乘一个整数A获取发送的整数,接收的时候除以整数A获取实际浮点数。整数A跟精确几位小数相关,2位小数A为100,3位小数A为1000。

预测回滚是怎么做得?

楼主你那个不能叫帧同步,层主这个才是。

说这么多无聊的屁话,让我来结束你们,
Multiplayer server | Colyseus: Simple & Fast Multiplayer Game Creation
(18条消息) io类游戏快速开发 3 状态同步_嘿嘿-CSDN博客
(18条消息) io类游戏快速开发 2_weixin_34319817的博客-CSDN博客
(18条消息) io类游戏快速开发 1_嘿嘿-CSDN博客
拿走不谢

2赞

再插眼,,再插眼。。

这兄台是明白人没毛病

其实很多人以为只要客户端计算逻辑服务器转发就算帧同步。所以实现过程是各自主角同步自己状态信息给其它客户端,以为这个每帧同步信息就是帧同步。其实帧同步同步只能有控制游戏差异的输入信息。其它逻辑过程一定要保持一致。游戏的差异性也是由输入差异来实现的。所以帧同步要保证每个客户端运算流程顺序结果数值要完全一致。只要有一丝差异就会滚雪球。所以物理引擎浮点数除了驱动update的控制者不一致的问题(其实这个好解决),最麻烦就是每次计算数值不一致导致滚雪球的差异变大导致最后不同步。一般帧同步debug的方式也是通过每帧输出各个单元的运算结果日志然后两份日志比较差异要完全一致才是合格否则从开始不一致的点开始查为啥不一致。亲测帧同步最好是ecs结构,另外建议逻辑层,界面层完全解偶。这样到时候可以吧逻辑层搬到服务器做校验服,界面层和数据层可以通过一层事件派发层互动,然后将这过程的事件消息输出日志做debug查找出差异导致不同步的点。另外这个消息层也能利用后期想要改成状态同步就直接服务器跑逻辑层吧这个时间消息发给客户的显示就行了,另外如果后期遇到性能问题只要把逻辑层放单独线程跑事件同步给UI线程显示就行(cocos lua亲测做过这个方案性能瓶颈时很有用,cocos creator目前试了没有cocos lua好做,主要因为js都打包混起来了。而且web的worker限制太多)。此方案我觉得是最灵活应对项目各个阶段的一些需求的设计。

mark!

mark~

有浮点数是不能同步的,时间短还好,时间长了差异就非常大

浮点数不影响同步 影响同步的是 确定性

浮点数没有确定性,不就影响同步了么

mark~

讨论的很激烈,mark一下!

层主这个正解 不用protobuf好评

教网课的不至于 不懂这个吧, 除非教的是单机游戏

教网课的不一定懂,有些讲师连状态同步和帧同步都没分清楚。

帧同步只会同步操作数据,比如你控制的摇杆方向或鼠标点击位置。
绝不会同步任何游戏状态,比如角色的位置方向血量技能值这些。

这个可以,收藏下