帧同步之帧编号与玩家事件采集
程序员文章站
2022-03-16 21:41:47
...
1)笔记
1)每一个帧的数据进行编号 和 数据采集
2)玩家的一些比赛信息要保存到客户端本地:
玩家在哪个场: zid,
哪场比赛: matchid,
比赛当中你是第几号玩家: self_seatid,
你是哪一边,属于A还是属于B: self_side
因此我们要通过zid和matchid来找当前比赛对象,
你才能把udp的数据包发送到比赛的房间
这样子你才知道你自己是谁
3)我们把所有的游戏信息都保存到了ugame里面
4)发udp的时候,根据zid和matchid找到这个比赛
5)修改game_start的协议 玩家匹配信息 PlayerMatchInfo:
seatid: 你是哪个座位上
heroid:
side:
哪个玩家,它是属于哪个英雄,它是属于哪一边,就全都知道了!
6)我们要把操作事件同步上去,
帧同步就是搜集所有玩家的操作,再统一发给所有的玩家,
然后每一个帧再统一同步到这个数据上来,因此帧的操作事件非常的关键
7)OptionEvent
seatid:
opt_type:操作类型 什么操作,加蓝加血等
x: 定点数
y
8)定点数: 16:整数部分
16:小数部分
9)有多少个操作事件,
seatid 操作了哪种类型,它的数据是多少
10)没有同步的帧的id及其对应的操作;
11)3个数据结构
OptionEvent:
FrameOpts:
LogicFrame:
NextFrameOpts: 采集到的下一帧的操作
哪个帧
哪个区间
哪个座位的玩家
发过来的数据内容
12)match_frames = {}: 搜集到的所有的帧操作
cur_frame_opt: 当前的帧操作
13)服务器记录一下当前玩家同步到哪个帧了;
14)如: 摇杆往右走,虽然走着走着,但是收到下一帧的时候,要按照逻辑帧的走,
因为客户端摇杆的走是不准确的,
让所有的客户端同步到同一个逻辑帧上面来
15)同步丢失掉的帧: sync_frame+1-->frame.frameid - 1
16)当前同步到的事件帧ID: this.sync_frameid = frame.frameid
17)last_frame_opt: 客户端应该同步到的最后一帧
18)把采集到的玩家的操作存起来:
table.insert(self.match_frames, self.next_frame_opt)
上一篇: 帧同步控制下的子弹
下一篇: orb特征描述符 物体匹配
推荐阅读