微信经典飞机大战之二:飞机起飞(背景滚动)

飞机起飞,其实质上是背景在滚动,相对运行引起的错觉。

我们利用2张一样的背景来循环滚动,然后通过每次滚动的时间间隔和像素间隔来控制背景滚动的速度,也就是飞机飞行的速度。注意:图片的高度一定要比屏幕高度高,这样才不会出现黑边。

bool GameLayer::init()
{
	bool bRet=false;
	do
	{
		CC_BREAK_IF(!CCLayer::init());

		//把png加入全局cache中
		CCSpriteFrameCache::sharedSpriteFrameCache()->addSpriteFramesWithFile("ui/shoot_background.plist");

		//加载background1
		background1=CCSprite::createWithSpriteFrame(CCSpriteFrameCache::sharedSpriteFrameCache()->spriteFrameByName("background.png"));
		background1->setAnchorPoint(ccp(0,0));
		background1->setPosition(ccp(0,0));
		this->addChild(background1);

		//加载background2
		background2=CCSprite::createWithSpriteFrame(CCSpriteFrameCache::sharedSpriteFrameCache()->spriteFrameByName("background.png"));
		background2->setAnchorPoint(ccp(0,0));
		background2->setPosition(ccp(0,background2->getContentSize().height-2)); //减2是为了防止图片交界的黑线
		this->addChild(background2);

                //执行背景滚动,每0.01秒执行一次
		this->schedule(schedule_selector(GameLayer::backgroundMove),0.01f);

		bRet=true;

	} while (0);

	return bRet;
}

//背景滚动
void GameLayer::backgroundMove(float dt)
{
	background1->setPositionY(background1->getPositionY()-2);
	background2->setPositionY(background1->getPositionY()+background1->getContentSize().height-2);
	if(background2->getPositionY()==0) //要注意因为背景图高度是842,所以每次减去2最后可以到达0,假如背景高度是841,那么这个条件永远达不到,滚动失败
	{
		background1->setPositionY(0);//如果图片2的高度为0,那么马上让图片1的高度也为0,即让图片1替换图片2
	}
}
调试运行,就可以看到背景在滚动了。

你可能感兴趣的:(微信经典飞机大战)