2D Parallax Effect
最近研究下2D 下parallax effect 的效果实现。parallax effect基本可以总结为远处的物体移动慢,近处的物体移动快。就像我们坐火车时一样,近处的树移动速度给人眼的感觉总比远处的山快。
在2D下由于没有深度,所以只能通过模拟来实现这个效果。基本实现原理是将屏幕分层,不同层的移动速度不一样。这样做了,然后将各个层的速度调好,基本上效果就出来了。
我们考虑下更复杂的情况。如果屏幕分了不同的主题,不同主题包含的元素不一样,元素之间有parallax effect,并且在移动一段距离后,主题之间会过渡切换。这样一来,就必须要求同一主题下的不同层要在同一个位置下结束,因为在那个位置上主题会切换,这一个主题上的元素将不会出现。不同层在同一个位置结束,如果层速度相同的话,说明层之间的长度是相同的。但是由于我们有parallax effect,那么层之间的速度不一致,要达到不同层在同一位置结束的效果,必然不同层的长度需要不一致。如果Vlayer1 / Vlayer2 = 0.5,那么Llayer1 / Llayer2 需要等于 0.5,也就是说层之间的速度和长度成正比例关系,速度越高的层,必然需要长度更长,因为它需要跟速度慢的层同时到达层的边界。
(上图来看,就是layer2 和 layer 1 同时从下到上走完,layer2 长度 是layer 1的 3倍,那么layer 2 的速度必然是layer 1 的3倍才能保证同时走到边界。)
如果存在连接两端的sprite的话,情况就不受控制了,因为layer2的长度和高度,是由layer2 与 layer1 的速度比确定的,也就是说它是变化的。那么这种连接的sprite就可能会被拉伸。
所以这样看来,做parallax effect 时,应该不能有这种边界元素。所有的sprite应该是一个独立的个体才行,不能对边界存在依赖。