一、纵向
1、头文件中:
#include <iostream>
#include "cocos2d.h"
#include "Scene.h"
USING_NS_CC;
class SpRunAction:publicCCLayer
{
public:
virtual bool init();
CREATE_FUNC(SpRunAction);
SCENE_FUNC(SpRunAction);
CCSprite *bg1;
CCSprite *bg2;
void update(float dt);
};
2、实现文件中:#include "SpRunAction.h"
bool SpRunAction::init()
{
CCSize winSize = CCDirector::sharedDirector()->getWinSize();
//背景1
bg1 =CCSprite::create("mineBG2.png");
bg1->setPosition(ccp(winSize.width/2,winSize.height/2));
this->addChild(bg1);
//背景2
bg2 =CCSprite::create("mineBG2.png");
bg2->setPosition(ccp(winSize.width/2, bg1->getContentSize().height+winSize.height/2));
this->addChild(bg2);
this->scheduleUpdate();
return true;
}
void SpRunAction:: update(float dt)
{
int posX1 = bg1->getPositionY();
int posX2 = bg2->getPositionY();
posX1 -= 2;
posX2 -= 2;
CCSize mapSize = bg1->getContentSize();
if(posX1 < -mapSize.height/2)
{
posX1 = mapSize.height + mapSize.height/2;
posX2 = mapSize.height/2;
}
if(posX2 < -mapSize.height/2)
{
posX2 = mapSize.height + mapSize.height/2;
posX1 = mapSize.height/2;
}
bg1->setPositionY(posX1);
bg2->setPositionY(posX2);
}
二、横向
void addBack()
{
//添加两张背景
bg1 = CCSprite::create(Start_bg);
bg1->setPosition(ccp(size.width/2,size.height/2));
this->addChild(bg1);
bg2 = CCSprite::create(Start_bg);
bg2->setPosition(ccp(size.width/2+size.width,size.height/2));
this->addChild(bg2);
//背景移动
this->schedule(schedule_selector(StartScene::movingBG), 0.1);
}
//实现背景的移动效果
void StartScene::movingBG()
{
if (bg1->getPositionX() == size.width/2)
{
if (bg2->getPositionX() == -size.width/2)
{
bg2->setPosition(ccp(size.width/2+size.width,size.height/2));
}
CCMoveTo *moveTo1 = CCMoveTo::create(10.0f, ccp(-size.width/2, size.height/2));
CCMoveTo *moveTo2 = CCMoveTo::create(10.0f, ccp(size.width/2, size.height/2));
bg1->stopAllActions();
bg2->stopAllActions();
bg1->runAction(moveTo1);
bg2->runAction(moveTo2);
}
if (bg1->getPositionX() == -size.width/2)
{
CCMoveTo *moveTo1 = CCMoveTo::create(10.0f, ccp(-size.width/2, size.height/2));
CCMoveTo *moveTo2 = CCMoveTo::create(10.0f, ccp(size.width/2, size.height/2));
bg1->setPosition(ccp(size.width/2+size.width,size.height/2));
bg1->stopAllActions();
bg2->stopAllActions();
bg1->runAction(moveTo2);
bg2->runAction(moveTo1);
}
}