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