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