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