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

     完美实现无缝拼接滚动.

  • 相关阅读:
    HTMLDOM
    换行
    【iOS】APP之数据存储
    开启远程XUL
    iOS之Streams
    Plugin的生命周期
    ActiveX Control Test Container
    ObjectiveC Runtime III【objc_msgSend函数】
    What is a Digital Signature?
    JS变量作用域
  • 原文地址:https://www.cnblogs.com/taoys/p/3532215.html
Copyright © 2020-2023  润新知