多层背景可以按不同于镜头的速度移动,营造层次感。重复纹理还需要处理循环边界,否则镜头走过一个纹理宽度时可能出现跳变或空白。
下面把一个游戏界面或模拟规则拆成可复查的记录。每组输入独立给出,先确认单位、先后次序和边界,再核对结果。它不依赖具体游戏的隐藏参数,读者可以直接挑选几步手工复算。
输入与规则
一维镜头位置按给定记录变化,四层背景各有初始偏移和滚动比例。未折回位置为初始偏移减镜头位置乘比例;按纹理宽度取零到宽度之间的余数。视口宽度不超过一块纹理,报告紧邻的两块起点。
纹理宽80,四层[初始偏移,滚动比例][[47, '0'], [54, '1/4'], [60, '1/2'], [49, '5/4']] 十个镜头位置[140, 6, 60, -70, 89, -55, -19, -112, -72, -108]
逐步记录
镜头位置140,四层结果依次为[未折回位置,循环相位,相邻两块起点]:[['47', '47', ['-33', '47']], ['19', '19', ['-61', '19']], ['-10', '70', ['-10', '70']], ['-126', '34', ['-46', '34']]]。每块宽80,视口宽四十,两个相邻副本共同覆盖视口。
镜头位置6,四层结果依次为[未折回位置,循环相位,相邻两块起点]:[['47', '47', ['-33', '47']], ['105/2', '105/2', ['-55/2', '105/2']], ['57', '57', ['-23', '57']], ['83/2', '83/2', ['-77/2', '83/2']]]。每块宽80,视口宽四十,两个相邻副本共同覆盖视口。
镜头位置60,四层结果依次为[未折回位置,循环相位,相邻两块起点]:[['47', '47', ['-33', '47']], ['39', '39', ['-41', '39']], ['30', '30', ['-50', '30']], ['-26', '54', ['-26', '54']]]。每块宽80,视口宽四十,两个相邻副本共同覆盖视口。
镜头位置-70,四层结果依次为[未折回位置,循环相位,相邻两块起点]:[['47', '47', ['-33', '47']], ['143/2', '143/2', ['-17/2', '143/2']], ['95', '15', ['-65', '15']], ['273/2', '113/2', ['-47/2', '113/2']]]。每块宽80,视口宽四十,两个相邻副本共同覆盖视口。
镜头位置89,四层结果依次为[未折回位置,循环相位,相邻两块起点]:[['47', '47', ['-33', '47']], ['127/4', '127/4', ['-193/4', '127/4']], ['31/2', '31/2', ['-129/2', '31/2']], ['-249/4', '71/4', ['-249/4', '71/4']]]。每块宽80,视口宽四十,两个相邻副本共同覆盖视口。
镜头位置-55,四层结果依次为[未折回位置,循环相位,相邻两块起点]:[['47', '47', ['-33', '47']], ['271/4', '271/4', ['-49/4', '271/4']], ['175/2', '15/2', ['-145/2', '15/2']], ['471/4', '151/4', ['-169/4', '151/4']]]。每块宽80,视口宽四十,两个相邻副本共同覆盖视口。
镜头位置-19,四层结果依次为[未折回位置,循环相位,相邻两块起点]:[['47', '47', ['-33', '47']], ['235/4', '235/4', ['-85/4', '235/4']], ['139/2', '139/2', ['-21/2', '139/2']], ['291/4', '291/4', ['-29/4', '291/4']]]。每块宽80,视口宽四十,两个相邻副本共同覆盖视口。
镜头位置-112,四层结果依次为[未折回位置,循环相位,相邻两块起点]:[['47', '47', ['-33', '47']], ['82', '2', ['-78', '2']], ['116', '36', ['-44', '36']], ['189', '29', ['-51', '29']]]。每块宽80,视口宽四十,两个相邻副本共同覆盖视口。
镜头位置-72,四层结果依次为[未折回位置,循环相位,相邻两块起点]:[['47', '47', ['-33', '47']], ['72', '72', ['-8', '72']], ['96', '16', ['-64', '16']], ['139', '59', ['-21', '59']]]。每块宽80,视口宽四十,两个相邻副本共同覆盖视口。
镜头位置-108,四层结果依次为[未折回位置,循环相位,相邻两块起点]:[['47', '47', ['-33', '47']], ['81', '1', ['-79', '1']], ['114', '34', ['-46', '34']], ['184', '24', ['-56', '24']]]。每块宽80,视口宽四十,两个相邻副本共同覆盖视口。
比例为零的层相位保持不变,其余层根据镜头和自身比例移动,越界只改变循环表示。
复核方法和适用范围
从前一次镜头到下一次的位移乘比例,应与该层未折回位移变化相反。两个相差完整纹理宽度的位置代表同一循环相位;折回结果必须非负且小于宽度,尤其检查负镜头位置。
滚动比例描述本例的画面效果,不是实际物体远近的物理测量。图层若不具备可平铺的边缘,仅正确计算循环位置也不能消除接缝。这里不计算遮挡、垂直滚动或相机缩放。
练习时可以只改动一项输入,预测从哪一步开始出现变化,再逐步比较。空状态、数值零和无法判断要分别记录;不要为了让最后结果一致而忽略中途的偏差。边界与同分约定同样属于规则,复核时应一并保留。
