有些平台允许角色从下方穿上去,却会承接从上方落下的角色。只比较最后位置会把两种情况混淆,检查运动方向和穿越范围才能表达单向规则。
本篇给出一份完整且可重复的虚构游戏记录。先读清规则,再尝试自行推演输入,最后逐项对照中间状态。不同作品可以选择不同约定,只有在相同前提下才能比较结果;不要只看最终数字相同就认为过程正确。
约定与原始记录
纵坐标向上增大,平台是给定高度的水平线,横向范围假定始终重叠。脚底从旧位置到新位置线性移动;只有下降且从平台上方或线上到达下方或线上,并且没有穿透指令时,才停在平台高度。
平台高度3 [[6, -1, False], [0, 7, False], [3, 1, False], [5, 3, False], [3, 3, False], [6, -1, True], [5, 4, False], [6, -5, False], [6, -4, False], [-3, 4, False], [9, -3, False], [11, 10, True]]
逐步计算
脚底6到-1,穿透标志False,移动方向下降;承接True,接触比例3/7,最后高度3。
脚底0到7,穿透标志False,移动方向上升;承接False,接触比例None,最后高度7。
脚底3到1,穿透标志False,移动方向下降;承接True,接触比例0,最后高度3。
脚底5到3,穿透标志False,移动方向下降;承接True,接触比例1,最后高度3。
脚底3到3,穿透标志False,移动方向静止;承接False,接触比例None,最后高度3。
脚底6到-1,穿透标志True,移动方向下降;承接False,接触比例None,最后高度-1。
脚底5到4,穿透标志False,移动方向下降;承接False,接触比例None,最后高度4。
脚底6到-5,穿透标志False,移动方向下降;承接True,接触比例3/11,最后高度3。
脚底6到-4,穿透标志False,移动方向下降;承接True,接触比例3/10,最后高度3。
脚底-3到4,穿透标志False,移动方向上升;承接False,接触比例None,最后高度4。
脚底9到-3,穿透标志False,移动方向下降;承接True,接触比例1/2,最后高度3。
脚底11到10,穿透标志True,移动方向下降;承接False,接触比例None,最后高度10。
十二次独立位移中有6次被平台承接。
复核方法与适用范围
用线段与水平线相交的参数核对接触时刻,再额外检查方向和穿透标志。站在原高度不动不算本例的新穿越,上升交点也不应被当作落地。
这里忽略角色宽度、移动平台、斜坡和其他碰撞体,只说明一条判定规则。接触参数表示本次位移中的比例,不是现实时间秒数;若一次移动途中还有别的障碍,应另外比较哪个接触先发生。
练习时可以只改动一个输入,再观察哪一步首次出现差异。对等于门槛、重复请求、空集合和最后一步分别留一份记录;如果发现异常,应先回到单位、顺序和边界约定,避免用额外补偿掩盖前面已经发生的错误。
