# 帧同步游戏服务
帧同步游戏服务是 游戏服务 其中一项,适用多人实时对战游戏使用。
# 游戏流程
# 前端创建房间
# 后台创建房间
# 游戏过程
# 开发
# 配置
game.json
需要配置帧同步相关参数,具体字段名和含义如下:
属性 | 类型 | 必填 | 默认值 | 描述 |
---|---|---|---|---|
lockStepOptions | Object | 否 | 帧同步配置对象 | |
lockStepOptions.gameTick | Number | 否 | 33 | 游戏帧下发周期,单位 ms |
lockStepOptions.heartBeatTick | Number | 否 | 2000 | 帧同步心跳周期,单位 ms |
lockStepOptions.offlineTimeLength | Number | 否 | 100000 | 帧同步心跳超时时长,单位 ms |
lockStepOptions.UDPReliabilityStrategy | Number | 否 | 3 | 帧冗余策略表示每次下发帧时总共下发的帧数量 |
lockStepOptions.dataType | String | 否 | "String" | actionList 的数据类型,有效值:"String" 字符串;"ArrayBuffer" 二进制数据 |
# 前端接口
# 初始化
所有接口和事件都通过 wx.getGameServerManager 返回的 GameServerManager 对象调用。获取到该对象之后,首先要调用 GameServerManager.login 建立和服务器的连接,连接成功后,才能调用后续的 GameServerManager.createRoom、GameServerManager.joinRoom 等接口。
# 断线重连
房间服务和游戏服务是两条不同连接,游戏开始之前,只需要关注房间服务。收到 GameServerManager.onLogout 事件之后,需要自行选择合适的时机调用 GameServerManager.login 重连回服务器。游戏开始之后,需要关注游戏服务的连接,收到 GameServerManager.onDisconnect 事件之后,需要自行选择合适的时机调用 GameServerManager.reconnect 重连服务器。
如果小游戏发生了重启,需要自行选择合适的时机按顺序调用 GameServerManager.login 和 GameServerManager.reconnect 进行重连。
# 补帧
游戏已开始的情况下,发生断线重连后,会在重连的回调收到当前最大帧号 maxFrameId,并通过 onSyncFrame 补回丢失的帧。没有提供主动补帧接口。
# 示例小游戏
https://github.com/wechat-miniprogram/minigame-lockstep-demo
# 后台接口
第三方后台可以通过https调用帧同步相关后台接口。
# 后台创建游戏房间
如果已经通过匹配或者其他方式已经组好对局,后台可以通过https直接创建帧同步游戏房间。
后续各个玩家在前端调用GameServerManager.joinRoom加入房间,GameServerManager.startGame开始游戏。根据在创建房间时传入的start_percent参数,达到相应人数的玩家调用GameServerManager.startGame接口后,即可进入帧同步流程。
# 分片拉取对局游戏帧
游戏结束后,第三方后台可以游戏对局时同步的游戏帧,用于数据校验和对局回放等功能。
还可以通过传入游戏帧序号的返回拉取固定区间的游戏帧。
# 获取游戏房间信息
同样的可以拉取当前房间的信息,查看当前房间和其中各个玩家的状态。
# 获取对局玩家位次信息
在玩家加入房间(调用GameServerManager.joinRoom)后,会分配唯一的clientId。通过该接口可以拉取房间中各个玩家的openId
和其clientId。