帧同步游戏服务

帧同步游戏服务是 游戏服务 其中一项,适用多人实时对战游戏使用。

游戏流程

前端创建房间

后台创建房间

游戏过程

开发

配置

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.createRoomGameServerManager.joinRoom 等接口。

断线重连

房间服务和游戏服务是两条不同连接,游戏开始之前,只需要关注房间服务。收到 GameServerManager.onLogout 事件之后,需要自行选择合适的时机调用 GameServerManager.login 重连回服务器。游戏开始之后,需要关注游戏服务的连接,收到 GameServerManager.onDisconnect 事件之后,需要自行选择合适的时机调用 GameServerManager.reconnect 重连服务器。

如果小游戏发生了重启,需要自行选择合适的时机按顺序调用 GameServerManager.loginGameServerManager.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