跳转到内容

状态同步与帧同步

多人游戏常见的同步方式有状态同步和帧同步(锁步)。本章介绍两者的取舍,以及客户端预测、服务器校正与延迟补偿等技术。

// 示例:客户端预测 + 服务器校正(伪代码)
void Client::Tick(const Input& input) {
pendingInputs.push_back(input);
localState = Simulate(localState, input); // 本地预测
}
void Client::OnServerState(const State& s, uint32_t lastAck) {
localState = s; // 以服务器为准
EraseUpTo(pendingInputs, lastAck);
for (auto& in : pendingInputs) // 重放未确认输入
localState = Simulate(localState, in);
}