欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

帧同步之帧编号与玩家事件采集

程序员文章站 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)