开始立项时候的一些帧同步的总结

一 帧同步注意事项【怎么保证确定性】

1:float问题

   主要是和平台iee754 和iee854平台不同,还有运算精度问题,建议使用定点数来解决这个问题

2:多线程问题

主要是每个客服端多线程算出结果可能会不一致,比如A客服端用了3个线程来算你 这个数据,b客服端用1个线程来算你这个数据导致最后A和B的结果不一致,除非你 能保证最后结果一致,要不最好别用

3:执行顺序问题  >>>>>>>> 注意容器的排序不确定性,lua table访问顺序最好用ipair 来保证顺序因为ipair是数组下标访问方式 ,pair是遍历键值对不能保证顺顺序

4:vector 浮点数问题

5:物理碰撞问题

6:随机数问题

7:对时(用NTP技术对时)

8:未初始化变量

9:使用了本地数据,因为本地变量等等数据不一样导致算出的结果不一致

 

二 帧同步预测,快照 回滚

预测:采用的是客服端先行策略,来保证客服端操作的流畅,客服端更具相关的逻辑算出下一帧玩家会做什么操作

快照:利用ecs框架进行代码隔离,所有的数据存在了component 组件当中,以便快速的形成快照,发给客服端进行回滚操作,或者进行

 

逻辑和显示的分离

比如在技能方面应该客服端的骨骼动画,不应该和逻辑层困在一起,举个例子

比如现在在第一帧的时候玩家进行了挥刀操作,这个时候就应该进行数学逻辑上的物理碰撞检测,而不和客服端的骨骼动画的动画时间(播放一个动作需要的时间)进行捆绑

帧同步网络协议的实现

1:可靠udp

2: 冗余udp

3:tcp + fec(这个可以参考韦易笑的博客)

https://github.com/skywind3000/kcp/wiki/Network-Layer

https://github.com/skywind3000/kcp/wiki/KCP-Best-Practice

 

5 ECS架构

 主要用来进行数据的分离,好产生每一帧所需要的快照 快照就是当前这一帧玩家的数据(位置,血量,等等)操作指令

E:Entity 实体  游戏内部基本单元

C:Component 组件 存储的数据,只能存储数据,注意不能在里面写逻辑运算

S:System 系统 对数据进行逻辑处理的地方

 

6:流畅性

1:运动补间

2:tcp ,udp

3:jitterBuffer

 

7:外挂

1:修改属性  对应方法:可以把你的属性值算出一个hash值放服务器上面去校验,别人的hash值也上传做一个仲裁校验知道谁作弊了,还可以对你的数值进行加密,比如int类型的加密,让找不到这个数据在哪里

2:透视 :对应方法:可以把这个关键的数据是不是显示moba迷雾这个bool值上传到服务器,这个值很小也不会对网络流量造成多大影响

3:自动操作 对应方法:没有太好的法子,基本靠玩家投票解决

4:皮肤修改美化 对应方法:严重以后在想法子解决这个问题

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值