实现多个玩家联机战斗时的操作转发。
玩家先通过组队服务,组好队伍。队长点击开始攻击后,玩家获得本次战斗的token,再连接战斗转发服务。
战斗转发服务为每个队伍创建一个房间,并仅允许该队伍的玩家加入该房间。房间内的每个玩家是完全平等的,所以每个玩家都不能发送指示性指令,比如开始战斗,结束战斗之类的。
每个玩家根据协议发送自己的状态信息,由服务决定当前应处的状态。
每秒切成的分片数。比如帧速为30,就是每秒被切成30片,每帧时长1/30秒。第8帧 从7/30开始,至8/30秒结束。
真正执行玩家操作的那一帧。玩家可以在任何时候发起操作,但是为了适当同步多个玩家的操作,会人为规定,每隔X帧,就有一个关键帧。
玩家在非关键帧产生的操作都会缓存,直到下一个关键帧来临时,再统一广播给客户端。
- 若房间不存在,则创建房间
- 若战斗未开始,则加入房间,返回加入成功,及当前已经在房间玩家列表
- 若战斗已开始,返回错误码
当有新玩家加入,向所有已加入房间成员发送加入通知。
- 所有队员都加入房间,立即开始战斗
- 从第一个队员加入房间起,X分钟后还未完全就绪,也立即开始战斗。
开始战斗后,玩家的操作发送给服务器保存
在关键帧来临的时候,所有缓存的操作将广播给房间中所有玩家。
所有用户发送了结束指令或者断开连接,战斗结束,关闭房间。
在等待组队和战斗中,玩家都有可能掉线。异常掉线会向其他玩家通知。组队过程中异常掉线,如果战斗还未开始,还可以重新连接后加入进来。
使用sproto