# TapBattleClient.StartFrameSync

# 功能描述

开始帧同步。只有房主可以调用此方法。调用成功后,所有玩家会收到OnFrameSyncStarted事件,其中包含随机数种子。

# 方法签名

public static void StartFrameSync(StartFrameSyncOption option)

# 参数说明

# StartFrameSyncOption

参数名 类型 必填 说明
success Action<BattleValidationResponse> 开始成功回调
fail Action<TapCallbackResult> 开始失败回调
complete Action<TapCallbackResult> 开始完成回调

# 使用说明

# 权限要求

  • 仅房主可用 - 只有房主才能开始帧同步
  • 房间已满 - 建议在房间人数达到maxPlayerCount时调用

# 触发事件

调用成功后,房间内所有玩家(包括房主)会收到 OnFrameSyncStarted 事件,事件中包含:

  • roomInfo: 房间信息
  • frameSyncId: 帧同步ID
  • seed: 随机数种子
  • 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() { }
}

# 最佳实践

  1. 权限检查 - 调用前确认是房主身份
  2. 状态检查 - 确保房间已满且所有玩家已准备
  3. 在事件中初始化 - 游戏状态初始化放在OnFrameSyncStarted事件中,不要放在success回调
  4. 创建随机数生成器 - 使用事件中的seed参数,在OnFrameSyncStarted中创建随机数生成器
  5. UI反馈 - 给玩家明确的帧同步开始反馈

# 相关API