多层背景可以按不同于镜头的速度移动,营造层次感。重复纹理还需要处理循环边界,否则镜头走过一个纹理宽度时可能出现跳变或空白。
下面把一个游戏界面或模拟规则拆成可复查的记录。每组输入独立给出,先确认单位、先后次序和边界,再核对结果。它不依赖具体游戏的隐藏参数,读者可以直接挑选几步手工复算。
输入与规则
一维镜头位置按给定记录变化,四层背景各有初始偏移和滚动比例。未折回位置为初始偏移减镜头位置乘比例;按纹理宽度取零到宽度之间的余数。视口宽度不超过一块纹理,报告紧邻的两块起点。
纹理宽48,四层[初始偏移,滚动比例][[17, '0'], [19, '1/4'], [21, '1/2'], [13, '5/4']] 十个镜头位置[-38, -39, -52, 4, 159, -30, 46, -25, -120, 129]
逐步记录
镜头位置-38,四层结果依次为[未折回位置,循环相位,相邻两块起点]:[['17', '17', ['-31', '17']], ['57/2', '57/2', ['-39/2', '57/2']], ['40', '40', ['-8', '40']], ['121/2', '25/2', ['-71/2', '25/2']]]。每块宽48,视口宽四十,两个相邻副本共同覆盖视口。
镜头位置-39,四层结果依次为[未折回位置,循环相位,相邻两块起点]:[['17', '17', ['-31', '17']], ['115/4', '115/4', ['-77/4', '115/4']], ['81/2', '81/2', ['-15/2', '81/2']], ['247/4', '55/4', ['-137/4', '55/4']]]。每块宽48,视口宽四十,两个相邻副本共同覆盖视口。
镜头位置-52,四层结果依次为[未折回位置,循环相位,相邻两块起点]:[['17', '17', ['-31', '17']], ['32', '32', ['-16', '32']], ['47', '47', ['-1', '47']], ['78', '30', ['-18', '30']]]。每块宽48,视口宽四十,两个相邻副本共同覆盖视口。
镜头位置4,四层结果依次为[未折回位置,循环相位,相邻两块起点]:[['17', '17', ['-31', '17']], ['18', '18', ['-30', '18']], ['19', '19', ['-29', '19']], ['8', '8', ['-40', '8']]]。每块宽48,视口宽四十,两个相邻副本共同覆盖视口。
镜头位置159,四层结果依次为[未折回位置,循环相位,相邻两块起点]:[['17', '17', ['-31', '17']], ['-83/4', '109/4', ['-83/4', '109/4']], ['-117/2', '75/2', ['-21/2', '75/2']], ['-743/4', '25/4', ['-167/4', '25/4']]]。每块宽48,视口宽四十,两个相邻副本共同覆盖视口。
镜头位置-30,四层结果依次为[未折回位置,循环相位,相邻两块起点]:[['17', '17', ['-31', '17']], ['53/2', '53/2', ['-43/2', '53/2']], ['36', '36', ['-12', '36']], ['101/2', '5/2', ['-91/2', '5/2']]]。每块宽48,视口宽四十,两个相邻副本共同覆盖视口。
镜头位置46,四层结果依次为[未折回位置,循环相位,相邻两块起点]:[['17', '17', ['-31', '17']], ['15/2', '15/2', ['-81/2', '15/2']], ['-2', '46', ['-2', '46']], ['-89/2', '7/2', ['-89/2', '7/2']]]。每块宽48,视口宽四十,两个相邻副本共同覆盖视口。
镜头位置-25,四层结果依次为[未折回位置,循环相位,相邻两块起点]:[['17', '17', ['-31', '17']], ['101/4', '101/4', ['-91/4', '101/4']], ['67/2', '67/2', ['-29/2', '67/2']], ['177/4', '177/4', ['-15/4', '177/4']]]。每块宽48,视口宽四十,两个相邻副本共同覆盖视口。
镜头位置-120,四层结果依次为[未折回位置,循环相位,相邻两块起点]:[['17', '17', ['-31', '17']], ['49', '1', ['-47', '1']], ['81', '33', ['-15', '33']], ['163', '19', ['-29', '19']]]。每块宽48,视口宽四十,两个相邻副本共同覆盖视口。
镜头位置129,四层结果依次为[未折回位置,循环相位,相邻两块起点]:[['17', '17', ['-31', '17']], ['-53/4', '139/4', ['-53/4', '139/4']], ['-87/2', '9/2', ['-87/2', '9/2']], ['-593/4', '175/4', ['-17/4', '175/4']]]。每块宽48,视口宽四十,两个相邻副本共同覆盖视口。
比例为零的层相位保持不变,其余层根据镜头和自身比例移动,越界只改变循环表示。
复核方法和适用范围
从前一次镜头到下一次的位移乘比例,应与该层未折回位移变化相反。两个相差完整纹理宽度的位置代表同一循环相位;折回结果必须非负且小于宽度,尤其检查负镜头位置。
滚动比例描述本例的画面效果,不是实际物体远近的物理测量。图层若不具备可平铺的边缘,仅正确计算循环位置也不能消除接缝。这里不计算遮挡、垂直滚动或相机缩放。
练习时可以只改动一项输入,预测从哪一步开始出现变化,再逐步比较。空状态、数值零和无法判断要分别记录;不要为了让最后结果一致而忽略中途的偏差。边界与同分约定同样属于规则,复核时应一并保留。
