状态同步与帧同步
多人游戏常见的同步方式有状态同步和帧同步(锁步)。本章介绍两者的取舍,以及客户端预测、服务器校正与延迟补偿等技术。
// 示例:客户端预测 + 服务器校正(伪代码)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);}