# TapBattleClient.StartFrameSync
# 功能描述
开始帧同步。只有房主可以调用此方法。调用成功后,所有玩家会收到OnFrameSyncStarted事件,其中包含随机数种子。
# 方法签名
public static void StartFrameSync(StartFrameSyncOption option)
# 参数说明
# StartFrameSyncOption
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| success | Action<BattleValidationResponse> | 否 | 开始成功回调 |
| fail | Action<TapCallbackResult> | 否 | 开始失败回调 |
| complete | Action<TapCallbackResult> | 否 | 开始完成回调 |
# 使用说明
# 权限要求
- 仅房主可用 - 只有房主才能开始帧同步
- 房间已满 - 建议在房间人数达到maxPlayerCount时调用
# 触发事件
调用成功后,房间内所有玩家(包括房主)会收到 OnFrameSyncStarted 事件,事件中包含:
roomInfo: 房间信息frameSyncId: 帧同步IDseed: 随机数种子serverTime: 服务器时间
# 注意事项
- 权限要求 - 只有房主可以调用
- 进入帧同步状态 - 调用后房间API不可用,只能调用SendFrameInput和StopFrameSync
- 启动帧同步 - 服务器开始收集和广播帧数据
- 创建随机数生成器 - 收到OnFrameSyncStarted后可创建随机数生成器
- 不可重复调用 - 帧同步进行中不能再次调用
# 代码示例
# 示例1:房主开始帧同步
using UnityEngine;
public class FrameSyncStarter : MonoBehaviour
{
private bool isRoomOwner;
public void OnStartButtonClick()
{
if (!isRoomOwner) {
Debug.LogWarning("只有房主才能开始帧同步");
return;
}
TapBattleClient.StartFrameSync(new StartFrameSyncOption
{
success = (result) => {
Debug.Log("帧同步开始成功");
// 注意:这里只是调用成功,真正的帧同步开始在OnFrameSyncStart事件中处理
},
fail = (result) => {
Debug.LogError($"开始帧同步失败: {result.errMsg}");
}
});
}
// 所有玩家都会收到这个事件
public void OnFrameSyncStarted(FrameSyncStartInfo info)
{
Debug.Log($"帧同步开始!房间ID: {info.roomInfo.id}, 帧同步ID: {info.frameSyncId}, 种子: {info.seed}");
// 使用服务器提供的种子创建确定性随机数生成器
var rng = TapBattleClient.NewRandomNumberGenerator(info.seed);
// 初始化游戏状态
InitializeGameState();
// 开始游戏循环
StartGameLoop();
}
private void InitializeGameState() { }
private void StartGameLoop() { }
}
# 最佳实践
- 权限检查 - 调用前确认是房主身份
- 状态检查 - 确保房间已满且所有玩家已准备
- 在事件中初始化 - 游戏状态初始化放在OnFrameSyncStarted事件中,不要放在success回调
- 创建随机数生成器 - 使用事件中的seed参数,在OnFrameSyncStarted中创建随机数生成器
- UI反馈 - 给玩家明确的帧同步开始反馈
# 相关API
- TapBattleClient.SendFrameInput - 发送玩家操作
- TapBattleClient.StopFrameSync - 停止帧同步
- TapBattleClient.NewRandomNumberGenerator - 创建随机数生成器
- ITapBattleEventHandler - OnFrameSyncStarted事件
