cocos2dx之实现视差效果
大家好,我是Lampard
今天与大家探讨一下简单的实现视差效果
首先什么是视差效果?
视差效果是游戏中非常流行的一种效果,在视差效果中,前景的速度移动得比较快,后景的视差移动得比较慢,从而造成立体感和运动错觉。什么?没听懂?简单来说就是根据相对速度的不一样从而产生一种在向前奔跑冲刺的感觉。
比如说我们的英雄没有运动,但是我们的背景图却以一定的速度往后运动,那么整个视觉看起来是不是就是有一种英雄在向前跑动的感觉?跑酷类游戏就是这样写出来的。
具体的代码实现
既然已经知道了视差效果是根据相对速度的不一样,但是假如是跑酷类游戏,背景图片跑得比精灵快我们难道需要准备一张特别长得背景图片吗?
答案是不需要的,我们只需要准备两张图片,其中第一张的尾部和第二张的首部相接,第二张的尾部和第一张的首部相接,那么就可以实现背景图的循环播放了(当然,如果有多张图的话那么背景的重复率就会降低,观感会更好)
class ParallaxSprite : public Node
{
CGSize _winSize; // 屏幕的大小
CGPoint _center; // 中心点的位置
CCSprite *_sprite1,*_sprite2; // 两张背景图精灵
float _speed; // 每帧移动的像素大小
void initMap(); // 填充这个背景结点
void update(); // 调用update函数每一帧进行移动
}
前面的就不说了,init函数就是把这个结点进行填充,设置好相关的参数,创建好两个背景图精灵等工作,注意两个背景精灵x坐标间隔一个屏幕宽度。
我们着重讲一下update方法:
(2)
首先我们是每帧以速度参数speed把背景图往后移动,然后进行背景图是否已经移动到屏幕外的判断,若是的话,把已经往左边移出屏幕的精灵,位置设回到现在在屏幕展示的背景精灵的右边,以便继续往左移的时候可以循环播放。若不是就正常移动。