回放可以记录每一步位移,也可以定期保存完整位置。漏掉一条增量后,后面增量即使都收到了,也可能一直带着相同偏差,直到新的绝对位置把状态重新对齐。
以下是一组可按记录复查的虚构游戏例子。它先固定输入、单位和执行顺序,再展示每一步结果。读者可以用纸笔挑出几步核对,不需要依赖具体游戏的后台数据。
明确规则与输入
二维整数位置,十四拍各有一个位移。接收方只漏掉指定的一拍增量,其余正常累计;在一个较晚拍末收到真实绝对位置并覆盖当前估计。检查点发生在当拍增量处理之后,只有这一个丢失事件。
起点[-6, 2],第6拍增量丢失,第12拍末收到绝对位置 十四拍位移[[0, -2], [0, -4], [1, 3], [-1, -1], [-2, 1], [4, -4], [2, 2], [-4, -2], [-2, -2], [-1, 2], [-1, -1], [-3, 0], [1, 2], [-3, 0]]
完整计算过程
第1拍位移[0, -2],接收增量,真实位置[-6, 0],接收方[-6, 0],估计减真实的误差[0, 0]。
第2拍位移[0, -4],接收增量,真实位置[-6, -4],接收方[-6, -4],估计减真实的误差[0, 0]。
第3拍位移[1, 3],接收增量,真实位置[-5, -1],接收方[-5, -1],估计减真实的误差[0, 0]。
第4拍位移[-1, -1],接收增量,真实位置[-6, -2],接收方[-6, -2],估计减真实的误差[0, 0]。
第5拍位移[-2, 1],接收增量,真实位置[-8, -1],接收方[-8, -1],估计减真实的误差[0, 0]。
第6拍位移[4, -4],该增量丢失,真实位置[-4, -5],接收方[-8, -1],估计减真实的误差[-4, 4]。
第7拍位移[2, 2],接收增量,真实位置[-2, -3],接收方[-6, 1],估计减真实的误差[-4, 4]。
第8拍位移[-4, -2],接收增量,真实位置[-6, -5],接收方[-10, -1],估计减真实的误差[-4, 4]。
第9拍位移[-2, -2],接收增量,真实位置[-8, -7],接收方[-12, -3],估计减真实的误差[-4, 4]。
第10拍位移[-1, 2],接收增量,真实位置[-9, -5],接收方[-13, -1],估计减真实的误差[-4, 4]。
第11拍位移[-1, -1],接收增量,真实位置[-10, -6],接收方[-14, -2],估计减真实的误差[-4, 4]。
第12拍位移[-3, 0],接收增量,拍末应用绝对检查点,真实位置[-13, -6],接收方[-13, -6],估计减真实的误差[0, 0]。
第13拍位移[1, 2],接收增量,真实位置[-12, -4],接收方[-12, -4],估计减真实的误差[0, 0]。
第14拍位移[-3, 0],接收增量,真实位置[-15, -4],接收方[-15, -4],估计减真实的误差[0, 0]。
检查点后位置重新一致,最终位置[-15, -4];丢失记录此前造成的偏差没有靠后续正常增量自行消失。
独立核对与边界
真实位置等于初始位置加全部前缀增量。丢失以后、检查点以前,估计位置应等于真实位置减去丢失增量;到检查点及以后,两者相同。用前缀求和可独立核对逐拍更新过程。
丢失增量刚好为零时可能没有可见偏差,因此本例特意使用非零丢失位移。检查点只校正此例的位置,不代表动画、道具或随机状态也自动恢复;完整回放需要分别保存它们的必要信息。
练习时只改变一个条件,先判断哪些中间步骤应当受影响,再重新计算。要把空状态、数值零和未能确定的结果分开。边界约定不同可能产生不同答案,复查的目标是确认输入、过程与规则一致,而不是只追求最后一个数字看起来相同。
