cocos2dx 背景用小尺寸图片滚动填充的方法

直接上代码

在初始化方法中添加图片:

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;
}
cocos2dx 背景用小尺寸图片滚动填充的方法


在界面刷新方法里处理:

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);
                    }
                }
            }
        }  
 
}

 完美实现无缝拼接滚动.

cocos2dx 背景用小尺寸图片滚动填充的方法

上一篇:Android Studio 之 ImageView 学习笔记


下一篇:移动端适配