多层背景可以按不同于镜头的速度移动,营造层次感。重复纹理还需要处理循环边界,否则镜头走过一个纹理宽度时可能出现跳变或空白。
下面把一个游戏界面或模拟规则拆成可复查的记录。每组输入独立给出,先确认单位、先后次序和边界,再核对结果。它不依赖具体游戏的隐藏参数,读者可以直接挑选几步手工复算。
一维镜头位置按给定记录变化,四层背景各有初始偏移和滚动比例。未折回位置为初始偏移减镜头位置乘比例;按纹理宽度取零到宽度之间的余数。视口宽度不超过一块纹理,报告紧邻的两块起点。
纹理宽64,四层[初始偏移,滚动比例][[0, '0'], [27, '1/4'], [6, '1/2'], [35, '5/4']] 十个镜头位置[95, -87, 70, -65, -14, -26, 20, -145, -148, -44]
镜头位置95,四层结果依次为[未折回位置,循环相位,相邻两块起点]:[['0', '0', ['-64', '0']], ['13/4', '13/4', ['-243/4', '13/4']], ['-83/2', '45/2', ['-83/2', '45/2']], ['-335/4', '177/4', ['-79/4', '177/4']]]。每块宽64,视口宽四十,两个相邻副本共同覆盖视口。
镜头位置-87,四层结果依次为[未折回位置,循环相位,相邻两块起点]:[['0', '0', ['-64', '0']], ['195/4', '195/4', ['-61/4', '195/4']], ['99/2', '99/2', ['-29/2', '99/2']], ['575/4', '63/4', ['-193/4', '63/4']]]。每块宽64,视口宽四十,两个相邻副本共同覆盖视口。
镜头位置70,四层结果依次为[未折回位置,循环相位,相邻两块起点]:[['0', '0', ['-64', '0']], ['19/2', '19/2', ['-109/2', '19/2']], ['-29', '35', ['-29', '35']], ['-105/2', '23/2', ['-105/2', '23/2']]]。每块宽64,视口宽四十,两个相邻副本共同覆盖视口。
镜头位置-65,四层结果依次为[未折回位置,循环相位,相邻两块起点]:[['0', '0', ['-64', '0']], ['173/4', '173/4', ['-83/4', '173/4']], ['77/2', '77/2', ['-51/2', '77/2']], ['465/4', '209/4', ['-47/4', '209/4']]]。每块宽64,视口宽四十,两个相邻副本共同覆盖视口。
镜头位置-14,四层结果依次为[未折回位置,循环相位,相邻两块起点]:[['0', '0', ['-64', '0']], ['61/2', '61/2', ['-67/2', '61/2']], ['13', '13', ['-51', '13']], ['105/2', '105/2', ['-23/2', '105/2']]]。每块宽64,视口宽四十,两个相邻副本共同覆盖视口。
镜头位置-26,四层结果依次为[未折回位置,循环相位,相邻两块起点]:[['0', '0', ['-64', '0']], ['67/2', '67/2', ['-61/2', '67/2']], ['19', '19', ['-45', '19']], ['135/2', '7/2', ['-121/2', '7/2']]]。每块宽64,视口宽四十,两个相邻副本共同覆盖视口。
镜头位置20,四层结果依次为[未折回位置,循环相位,相邻两块起点]:[['0', '0', ['-64', '0']], ['22', '22', ['-42', '22']], ['-4', '60', ['-4', '60']], ['10', '10', ['-54', '10']]]。每块宽64,视口宽四十,两个相邻副本共同覆盖视口。
镜头位置-145,四层结果依次为[未折回位置,循环相位,相邻两块起点]:[['0', '0', ['-64', '0']], ['253/4', '253/4', ['-3/4', '253/4']], ['157/2', '29/2', ['-99/2', '29/2']], ['865/4', '97/4', ['-159/4', '97/4']]]。每块宽64,视口宽四十,两个相邻副本共同覆盖视口。
镜头位置-148,四层结果依次为[未折回位置,循环相位,相邻两块起点]:[['0', '0', ['-64', '0']], ['64', '0', ['-64', '0']], ['80', '16', ['-48', '16']], ['220', '28', ['-36', '28']]]。每块宽64,视口宽四十,两个相邻副本共同覆盖视口。
镜头位置-44,四层结果依次为[未折回位置,循环相位,相邻两块起点]:[['0', '0', ['-64', '0']], ['38', '38', ['-26', '38']], ['28', '28', ['-36', '28']], ['90', '26', ['-38', '26']]]。每块宽64,视口宽四十,两个相邻副本共同覆盖视口。
比例为零的层相位保持不变,其余层根据镜头和自身比例移动,越界只改变循环表示。
从前一次镜头到下一次的位移乘比例,应与该层未折回位移变化相反。两个相差完整纹理宽度的位置代表同一循环相位;折回结果必须非负且小于宽度,尤其检查负镜头位置。
滚动比例描述本例的画面效果,不是实际物体远近的物理测量。图层若不具备可平铺的边缘,仅正确计算循环位置也不能消除接缝。这里不计算遮挡、垂直滚动或相机缩放。
练习时可以只改动一项输入,预测从哪一步开始出现变化,再逐步比较。空状态、数值零和无法判断要分别记录;不要为了让最后结果一致而忽略中途的偏差。边界与同分约定同样属于规则,复核时应一并保留。