多层背景可以按不同于镜头的速度移动,营造层次感。重复纹理还需要处理循环边界,否则镜头走过一个纹理宽度时可能出现跳变或空白。
下面把一个游戏界面或模拟规则拆成可复查的记录。每组输入独立给出,先确认单位、先后次序和边界,再核对结果。它不依赖具体游戏的隐藏参数,读者可以直接挑选几步手工复算。
输入与规则
一维镜头位置按给定记录变化,四层背景各有初始偏移和滚动比例。未折回位置为初始偏移减镜头位置乘比例;按纹理宽度取零到宽度之间的余数。视口宽度不超过一块纹理,报告紧邻的两块起点。
纹理宽64,四层[初始偏移,滚动比例][[29, '0'], [42, '1/4'], [63, '1/2'], [48, '5/4']] 十个镜头位置[154, -12, -126, -37, -107, -157, -134, -8, -74, -40]
逐步记录
镜头位置154,四层结果依次为[未折回位置,循环相位,相邻两块起点]:[['29', '29', ['-35', '29']], ['7/2', '7/2', ['-121/2', '7/2']], ['-14', '50', ['-14', '50']], ['-289/2', '95/2', ['-33/2', '95/2']]]。每块宽64,视口宽四十,两个相邻副本共同覆盖视口。
镜头位置-12,四层结果依次为[未折回位置,循环相位,相邻两块起点]:[['29', '29', ['-35', '29']], ['45', '45', ['-19', '45']], ['69', '5', ['-59', '5']], ['63', '63', ['-1', '63']]]。每块宽64,视口宽四十,两个相邻副本共同覆盖视口。
镜头位置-126,四层结果依次为[未折回位置,循环相位,相邻两块起点]:[['29', '29', ['-35', '29']], ['147/2', '19/2', ['-109/2', '19/2']], ['126', '62', ['-2', '62']], ['411/2', '27/2', ['-101/2', '27/2']]]。每块宽64,视口宽四十,两个相邻副本共同覆盖视口。
镜头位置-37,四层结果依次为[未折回位置,循环相位,相邻两块起点]:[['29', '29', ['-35', '29']], ['205/4', '205/4', ['-51/4', '205/4']], ['163/2', '35/2', ['-93/2', '35/2']], ['377/4', '121/4', ['-135/4', '121/4']]]。每块宽64,视口宽四十,两个相邻副本共同覆盖视口。
镜头位置-107,四层结果依次为[未折回位置,循环相位,相邻两块起点]:[['29', '29', ['-35', '29']], ['275/4', '19/4', ['-237/4', '19/4']], ['233/2', '105/2', ['-23/2', '105/2']], ['727/4', '215/4', ['-41/4', '215/4']]]。每块宽64,视口宽四十,两个相邻副本共同覆盖视口。
镜头位置-157,四层结果依次为[未折回位置,循环相位,相邻两块起点]:[['29', '29', ['-35', '29']], ['325/4', '69/4', ['-187/4', '69/4']], ['283/2', '27/2', ['-101/2', '27/2']], ['977/4', '209/4', ['-47/4', '209/4']]]。每块宽64,视口宽四十,两个相邻副本共同覆盖视口。
镜头位置-134,四层结果依次为[未折回位置,循环相位,相邻两块起点]:[['29', '29', ['-35', '29']], ['151/2', '23/2', ['-105/2', '23/2']], ['130', '2', ['-62', '2']], ['431/2', '47/2', ['-81/2', '47/2']]]。每块宽64,视口宽四十,两个相邻副本共同覆盖视口。
镜头位置-8,四层结果依次为[未折回位置,循环相位,相邻两块起点]:[['29', '29', ['-35', '29']], ['44', '44', ['-20', '44']], ['67', '3', ['-61', '3']], ['58', '58', ['-6', '58']]]。每块宽64,视口宽四十,两个相邻副本共同覆盖视口。
镜头位置-74,四层结果依次为[未折回位置,循环相位,相邻两块起点]:[['29', '29', ['-35', '29']], ['121/2', '121/2', ['-7/2', '121/2']], ['100', '36', ['-28', '36']], ['281/2', '25/2', ['-103/2', '25/2']]]。每块宽64,视口宽四十,两个相邻副本共同覆盖视口。
镜头位置-40,四层结果依次为[未折回位置,循环相位,相邻两块起点]:[['29', '29', ['-35', '29']], ['52', '52', ['-12', '52']], ['83', '19', ['-45', '19']], ['98', '34', ['-30', '34']]]。每块宽64,视口宽四十,两个相邻副本共同覆盖视口。
比例为零的层相位保持不变,其余层根据镜头和自身比例移动,越界只改变循环表示。
复核方法和适用范围
从前一次镜头到下一次的位移乘比例,应与该层未折回位移变化相反。两个相差完整纹理宽度的位置代表同一循环相位;折回结果必须非负且小于宽度,尤其检查负镜头位置。
滚动比例描述本例的画面效果,不是实际物体远近的物理测量。图层若不具备可平铺的边缘,仅正确计算循环位置也不能消除接缝。这里不计算遮挡、垂直滚动或相机缩放。
练习时可以只改动一项输入,预测从哪一步开始出现变化,再逐步比较。空状态、数值零和无法判断要分别记录;不要为了让最后结果一致而忽略中途的偏差。边界与同分约定同样属于规则,复核时应一并保留。
