多层背景可以按不同于镜头的速度移动,营造层次感。重复纹理还需要处理循环边界,否则镜头走过一个纹理宽度时可能出现跳变或空白。
下面把一个游戏界面或模拟规则拆成可复查的记录。每组输入独立给出,先确认单位、先后次序和边界,再核对结果。它不依赖具体游戏的隐藏参数,读者可以直接挑选几步手工复算。
一维镜头位置按给定记录变化,四层背景各有初始偏移和滚动比例。未折回位置为初始偏移减镜头位置乘比例;按纹理宽度取零到宽度之间的余数。视口宽度不超过一块纹理,报告紧邻的两块起点。
纹理宽64,四层[初始偏移,滚动比例][[61, '0'], [5, '1/4'], [61, '1/2'], [12, '5/4']] 十个镜头位置[-149, -24, -22, -146, 13, 43, 114, 60, 14, -35]
镜头位置-149,四层结果依次为[未折回位置,循环相位,相邻两块起点]:[['61', '61', ['-3', '61']], ['169/4', '169/4', ['-87/4', '169/4']], ['271/2', '15/2', ['-113/2', '15/2']], ['793/4', '25/4', ['-231/4', '25/4']]]。每块宽64,视口宽四十,两个相邻副本共同覆盖视口。
镜头位置-24,四层结果依次为[未折回位置,循环相位,相邻两块起点]:[['61', '61', ['-3', '61']], ['11', '11', ['-53', '11']], ['73', '9', ['-55', '9']], ['42', '42', ['-22', '42']]]。每块宽64,视口宽四十,两个相邻副本共同覆盖视口。
镜头位置-22,四层结果依次为[未折回位置,循环相位,相邻两块起点]:[['61', '61', ['-3', '61']], ['21/2', '21/2', ['-107/2', '21/2']], ['72', '8', ['-56', '8']], ['79/2', '79/2', ['-49/2', '79/2']]]。每块宽64,视口宽四十,两个相邻副本共同覆盖视口。
镜头位置-146,四层结果依次为[未折回位置,循环相位,相邻两块起点]:[['61', '61', ['-3', '61']], ['83/2', '83/2', ['-45/2', '83/2']], ['134', '6', ['-58', '6']], ['389/2', '5/2', ['-123/2', '5/2']]]。每块宽64,视口宽四十,两个相邻副本共同覆盖视口。
镜头位置13,四层结果依次为[未折回位置,循环相位,相邻两块起点]:[['61', '61', ['-3', '61']], ['7/4', '7/4', ['-249/4', '7/4']], ['109/2', '109/2', ['-19/2', '109/2']], ['-17/4', '239/4', ['-17/4', '239/4']]]。每块宽64,视口宽四十,两个相邻副本共同覆盖视口。
镜头位置43,四层结果依次为[未折回位置,循环相位,相邻两块起点]:[['61', '61', ['-3', '61']], ['-23/4', '233/4', ['-23/4', '233/4']], ['79/2', '79/2', ['-49/2', '79/2']], ['-167/4', '89/4', ['-167/4', '89/4']]]。每块宽64,视口宽四十,两个相邻副本共同覆盖视口。
镜头位置114,四层结果依次为[未折回位置,循环相位,相邻两块起点]:[['61', '61', ['-3', '61']], ['-47/2', '81/2', ['-47/2', '81/2']], ['4', '4', ['-60', '4']], ['-261/2', '123/2', ['-5/2', '123/2']]]。每块宽64,视口宽四十,两个相邻副本共同覆盖视口。
镜头位置60,四层结果依次为[未折回位置,循环相位,相邻两块起点]:[['61', '61', ['-3', '61']], ['-10', '54', ['-10', '54']], ['31', '31', ['-33', '31']], ['-63', '1', ['-63', '1']]]。每块宽64,视口宽四十,两个相邻副本共同覆盖视口。
镜头位置14,四层结果依次为[未折回位置,循环相位,相邻两块起点]:[['61', '61', ['-3', '61']], ['3/2', '3/2', ['-125/2', '3/2']], ['54', '54', ['-10', '54']], ['-11/2', '117/2', ['-11/2', '117/2']]]。每块宽64,视口宽四十,两个相邻副本共同覆盖视口。
镜头位置-35,四层结果依次为[未折回位置,循环相位,相邻两块起点]:[['61', '61', ['-3', '61']], ['55/4', '55/4', ['-201/4', '55/4']], ['157/2', '29/2', ['-99/2', '29/2']], ['223/4', '223/4', ['-33/4', '223/4']]]。每块宽64,视口宽四十,两个相邻副本共同覆盖视口。
比例为零的层相位保持不变,其余层根据镜头和自身比例移动,越界只改变循环表示。
从前一次镜头到下一次的位移乘比例,应与该层未折回位移变化相反。两个相差完整纹理宽度的位置代表同一循环相位;折回结果必须非负且小于宽度,尤其检查负镜头位置。
滚动比例描述本例的画面效果,不是实际物体远近的物理测量。图层若不具备可平铺的边缘,仅正确计算循环位置也不能消除接缝。这里不计算遮挡、垂直滚动或相机缩放。
练习时可以只改动一项输入,预测从哪一步开始出现变化,再逐步比较。空状态、数值零和无法判断要分别记录;不要为了让最后结果一致而忽略中途的偏差。边界与同分约定同样属于规则,复核时应一并保留。