转发,请保持地址:http://blog.csdn.net/stalendp/article/details/8602281
手机游戏中动作类的游戏还是很受欢迎的,这些游戏中,大部分有着移动的背景。这篇文章将介绍使用WiEngine的wyParallaxNode类来实现这一效果。
使用wyParallaxNode,需要指定x和y轴的移动范围,其默认为[-MAX_FLOAT / 2,MAX_FLOAT / 2];下面的代码,限定了y轴不进行移动。
wyParallaxNode* parallax = wyParallaxNode::make(); parallax->setMinY(0); parallax->setMaxY(0); addChildLocked(parallax);
接着向wyParallaxNode中添加移动的sprite,我使用了两个图片作为背景(注:图片来源网络,只是用于学习目的):
其中一个用于前景,一个用于背景,以不同的速率进行移动。
要使图片进行反复迭代地出现,需要使用wyTiledSprite,定义如下:
wyTiledSprite* bg_front = wyTiledSprite::make(wyTexture2D::makePNG(RES("R.drawable.bg3"))); bg_front->setContentSize(wyDevice::winWidth, DP(115)); bg_front->setTileDirection(true, false); bg_front->setAnchor(0, 0); bg_front->setPosition(0, 0); wyTiledSprite* bg_back = wyTiledSprite::make(wyTexture2D::makePNG(RES("R.drawable.bg2"))); bg_back->setContentSize(wyDevice::winWidth, DP(115)); bg_back->setTileDirection(true, false); bg_back->setAnchor(0, 0); bg_back->setPosition(0, 0);
接着把上面定义的sprite,添加到wyParallaxNode中,并指定不同的视差比例,代码如下:
parallax->addChild(bg_back, -1, 0.1f, 1.0f); parallax->addChild(bg_front, 2, 1.0f, 2.0f);
最后让动画动起来:
wyTimer* timer = wyTimer::make(wyTargetSelector::make(this, SEL(Background::update))); scheduleLocked(timer); 。。。。。 void update(wyTargetSelector* ts) { parallax->offsetBy(5, 0); }