zoukankan      html  css  js  c++  java
  • 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应该是一个独立的个体才行,不能对边界存在依赖。

  • 相关阅读:
    【BZOJ4367】[IOI2014]holiday假期 分治+主席树
    【BZOJ1264】[AHOI2006]基因匹配Match DP+树状数组
    【BZOJ4379】[POI2015]Modernizacja autostrady 树形DP
    【BZOJ4380】[POI2015]Myjnie 区间DP
    【BZOJ4382】[POI2015]Podział naszyjnika 堆+并查集+树状数组
    【BZOJ4384】[POI2015]Trzy wieże 树状数组
    【BZOJ4388】JOI2012 invitation 堆+线段树+并查集(模拟Prim)
    【BZOJ4550】小奇的博弈 博弈论
    Sqlserver列出所有数据库名,表名,字段名
    聚合与组合的区别?
  • 原文地址:https://www.cnblogs.com/pbblog/p/2970784.html
Copyright © 2011-2022 走看看