⚙️ 帧同步功能
帧同步(Frame Synchronization)是一种多人游戏同步机制,确保所有客户端在相同的帧上执行相同的逻辑,从而保证游戏状态的一致性。
核心特性
-
✅
固定帧率:可配置的目标 FPS(默认 20 FPS)
-
✅
输入同步:自动收集和同步客户端输入
-
✅
帧数据记录:支持记录帧数据用于回放
-
✅
延迟检测:自动检测帧延迟并警告
使用示例
服务端代码:
import { FrameSyncRoom, ClientInput } from "../utils/FrameSync";
export class GameRoom extends FrameSyncRoom<MyRoomState> {
onCreate(options: any) {
// 初始化帧同步(20 FPS)
this.initFrameSync({
targetFPS: 20,
enabled: true,
});
// 启动帧同步
this.startFrameSync();
}
// 实现帧更新逻辑
protected onFrameUpdate(frame: number, inputs: ClientInput[]) {
// 处理所有客户端的输入
for (const input of inputs) {
this.processPlayerInput(input);
}
}
// 实现帧同步逻辑
protected onFrameSync(frame: number, frameData: any) {
// 同步状态到客户端
this.state.frame = frame;
}
}
客户端代码:
// 连接房间
const room = await client.joinOrCreate("game_room", { fps: 20 });
// 发送输入
room.send("input", {
inputs: {
move: { x: 1, y: 0 },
attack: false,
}
});
// 接收帧同步信息
room.onMessage("frameSync", (message) => {
console.log("当前帧:", message.currentFrame);
console.log("目标FPS:", message.targetFPS);
});
房间类型
ROOM
game_room
帧同步房间
使用帧同步机制的游戏房间,支持多人实时同步
连接参数:
{
"fps": 20, // 目标帧率(可选,默认 20)
"recordFrames": false // 是否记录帧数据(可选)
}
配置选项
{
"targetFPS": 20, // 目标帧率(默认:20)
"enabled": true, // 是否启用(默认:true)
"maxFrameDelay": 100, // 最大帧延迟,单位:毫秒(默认:100)
"recordFrames": false // 是否记录帧数据(默认:false)
}