您的位置:首页 > 移动开发 > Cocos引擎

cocos2d-x无限滚动背景

2013-11-03 00:11 295 查看
在一些跑酷类,打飞机类的手游,背景需要无限的滚动,我也来实现一下无限跑动。原理比较简单,就是画一张头尾可以相接图片,用两个精灵加载这个图片,两个精灵的位置是相接的,然后两个精灵轮流显示,如果有一个精灵完全离开屏幕,则将精灵设置为连接在另一个精灵后的位置。我们来看看代码:

bool CTest::init()
{
CCAssert(CCLayer::init(), "");

// 设置背景
m_pBackGround1 = CCSprite::create(STR_BACKGROUND);    // STR_BACKGROUND是图片的路径
m_pBackGround2 = CCSprite::create(STR_BACKGROUND);    // 加载背景
CCAssert(m_pBackGround1 && m_pBackGround2, "");
CCSize size = CCDirector::sharedDirector()->getWinSize();
CCRect rcBounding = m_pBackGround1->boundingBox();
m_pBackGround1->setPosition(ccp(rcBounding.size.width / 2, size.height / 2));    // 设置在屏幕中间
m_pBackGround2->setPosition(ccp(rcBounding.size.width * 3 / 2, size.height / 2));// 设置精灵2连接在精灵1的后面
this->addChild(m_pBackGround1, CHILD_ORDER_BACKGROUND);    // CHILD_ORDER_BACKGROUND精灵的层级,这里是 = 1
this->addChild(m_pBackGround2, CHILD_ORDER_BACKGROUND);

  scheduleUpdate();
   
return true;
}


我们还需要在update函数中,不断检查精灵的位置,并设置正确的位置

void CTest::update(float delta)
{
// 背景无限滚动
CCAssert(m_pBackGround1 && m_pBackGround2, "");
m_pBackGround1->setPositionX(m_pBackGround1->getPositionX() - 1);    // 每次update都向左移动1点
m_pBackGround2->setPositionX(m_pBackGround2->getPositionX() - 1);
CCRect rcBounding1 = m_pBackGround1->boundingBox();
CCRect rcBounding2 = m_pBackGround2->boundingBox();
if (rcBounding1.getMaxX() <= 0)    // 如果完全消失在屏幕上,就移动精灵1到精灵2的后面
{
m_pBackGround1->setPositionX(rcBounding1.size.width * 3 / 2);
}
if (rcBounding2.getMaxX() <= 0)    // 如果完全消失在屏幕上,就移动精灵2到精灵1的后面
{
m_pBackGround2->setPositionX(rcBounding2.size.width * 3 / 2);
}
}


就是这样不断的切换两张图的相对位置,就可以实现无限滚动了,简单吧
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: