只拿到最近两份位置快照时,可以沿最近速度短暂预测当前位置。时间越久,方向和速度不变的假设越难成立,因此例子给外推设置明确上限。
本篇用一组独立输入把规则展开为可重复核对的记录。先确认单位、编号及边界,再自行尝试推演,然后寻找与下面过程第一次不同的位置。所有结果只在这里写明的规则下成立,不能当作所有游戏的统一实现。
两份快照时刻递增,位置是二维整数。以两点间平均速度作恒速外推;查询都不早于最新快照,超过外推上限后停在上限时刻的预测位置,不继续远走。结果用精确分数保留。
快照(0,[4, 5])和(2,[6, 6]),预测上限7 [2, 9, 10, 8, 10, 11, 5, 16, 11, 5, 7, 17, 12]
查询时刻2,距最新快照0拍,实际预测0拍,速度['1', '1/2'],预测位置['6', '6'];处于允许预测范围。
查询时刻9,距最新快照7拍,实际预测7拍,速度['1', '1/2'],预测位置['13', '19/2'];处于允许预测范围。
查询时刻10,距最新快照8拍,实际预测7拍,速度['1', '1/2'],预测位置['13', '19/2'];已限制继续外推。
查询时刻8,距最新快照6拍,实际预测6拍,速度['1', '1/2'],预测位置['12', '9'];处于允许预测范围。
查询时刻10,距最新快照8拍,实际预测7拍,速度['1', '1/2'],预测位置['13', '19/2'];已限制继续外推。
查询时刻11,距最新快照9拍,实际预测7拍,速度['1', '1/2'],预测位置['13', '19/2'];已限制继续外推。
查询时刻5,距最新快照3拍,实际预测3拍,速度['1', '1/2'],预测位置['9', '15/2'];处于允许预测范围。
查询时刻16,距最新快照14拍,实际预测7拍,速度['1', '1/2'],预测位置['13', '19/2'];已限制继续外推。
查询时刻11,距最新快照9拍,实际预测7拍,速度['1', '1/2'],预测位置['13', '19/2'];已限制继续外推。
查询时刻5,距最新快照3拍,实际预测3拍,速度['1', '1/2'],预测位置['9', '15/2'];处于允许预测范围。
查询时刻7,距最新快照5拍,实际预测5拍,速度['1', '1/2'],预测位置['11', '17/2'];处于允许预测范围。
查询时刻17,距最新快照15拍,实际预测7拍,速度['1', '1/2'],预测位置['13', '19/2'];已限制继续外推。
查询时刻12,距最新快照10拍,实际预测7拍,速度['1', '1/2'],预测位置['13', '19/2'];已限制继续外推。
超过外推上限的查询全部停在同一预测端点,不能当作继续收到新位置。
先求最新时刻到查询时刻的有效预测时长,不能超过规定上限;再分别核对两轴的位移是否为速度乘这段时长。多个超出上限的查询应得到相同位置。
外推结果是基于假设的估计,不是实际收到的新位置。角色若中途转向,预测会产生误差;上限只限制偏移继续累积,并不保证估计正确。本例没有处理新快照到来后的校正或画面平滑。
练习时先保存原始输入及中间结果,再只改变一个条件观察差异。重点检查空状态、相同数值、恰好到达边界和最后一步。不要为了凑出相同的最终结果而忽略较早出现的偏差,过程和结论都应能由同一套规则解释。