直接上代码
在初始化方法中添加图片:
bool BackGroundLayer::init() { frameCache=CCSpriteFrameCache::sharedSpriteFrameCache(); CCSize visibleSize = CCDirector::sharedDirector()->getVisibleSize(); bgCell1=CCSprite::createWithSpriteFrame(frameCache->spriteFrameByName("bgCell.png")); bgSprintArr = CCArray::create(); bgSprintArr->retain(); bgSignArr=CCArray::create(); bgSignArr->retain(); CCSize sprintSize = bgCell1->getContentSize(); bgCell1->setAnchorPoint(ccp(0,0)); bgCell1->setPosition(ccp(0,0)); this->addChild(bgCell1); bgSprintArr->addObject(bgCell1); int flipCount=visibleSize.width/sprintSize.width+1;//多加一张图片用来滚动替换 for(int i=0;i<flipCount;i++) { bgCell2 = CCSprite::createWithSpriteFrame(frameCache->spriteFrameByName("bgCell.png")); bgCell2->setAnchorPoint(ccp(0,0)); bgCell2->setPosition(ccp(sprintSize.width*(i+1)-(1+i),0)); if(i%2==0) //偶数 { bgCell2->setFlipX(true); } this->addChild(bgCell2); bgSprintArr->addObject(bgCell2); } return true; }
在界面刷新方法里处理:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33 |
void
RunBackGroundLayer::rollBg( float
delta) { //CCSize mapSize = bgCell1->getContentSize(); //本次需要滚动的像素数 float
moveX =delta/(1.0/60.0); CCSize visibleSize = CCDirector::sharedDirector()->getVisibleSize(); CCObject* obj=NULL; CCSprite* bgCellTmp=NULL; CCSize sprintSize = bgCell1->getContentSize(); //滚动和切换背景图片 CCARRAY_FOREACH(bgSprintArr,obj){ bgCellTmp=(CCSprite*)obj; float
moveXTo = bgCellTmp->getPositionX()-moveX; bgCellTmp->setPositionX(moveXTo); if (bgCellTmp->getPositionX()<-sprintSize.width) { bgCellTmp->setPositionX((bgSprintArr->count()-1)*sprintSize.width-(bgSprintArr->count()+1)); if (bgSprintArr->count()%2!=0) { if (bgCellTmp->isFlipX()) { bgCellTmp->setFlipX( false ); } else { bgCellTmp->setFlipX( true ); } } } } } |
完美实现无缝拼接滚动.
原文:http://www.cnblogs.com/taoys/p/3532215.html