cocos2dx 背景用小尺寸图片滚动填充的方法
直接上代码
在初始化方法中添加图片:
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; }
在界面刷新方法里处理:
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);
					}
				}
			}
		}	
}
完美实现无缝拼接滚动.
 
                     
                    
                 
                    
                 
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号