【cocos2d-x 手游研發小技巧(2)循環無限滾動的登陸背景】


原創文章,轉載請附上鏈接:http://www.cnblogs.com/zisou/p/cocos2d-xARPG6.html

首先讓大家知道我們想要實現的最終效果是什么樣的?

看一個《逆天仙魔錄》例子圖:

就是一個連貫循環的背景圖,如何讓他無間隔的循環連貫跑起來,這里我們利用了定時器schedule方法;

定時器功能有無限循環的功能,那么我們運用這個功能主要是拿來循環刷幀的!

我們先准備一下效果圖,如下:

這個背景圖夠長吧?而且它兩邊已經被我們的美工做成可循環連接的了,所以我們只需要程序把它循環起來。

具體代碼如下:

制造背景的方法

void LoginScenes::makebd(float num,int w,int tag)
{
    float x,y;
    CCPoint origin = CCDirector::sharedDirector()->getVisibleOrigin();
    CCSize size = CCDirector::sharedDirector()->getWinSize();
    x = size.width;
    y = size.height+origin.y;

    CCSprite *background=CCSprite::create(p_loginallbd);
    background->setAnchorPoint(CCPoint(0,0.5));
    background->setPosition(CCPoint(background->getContentSize().width*num+w,y/2));
    this->addChild(background,tag,tag);
}


循環背景的方法

void LoginScenes::movebd(float times)
{
    float x,y;
    CCPoint origin = CCDirector::sharedDirector()->getVisibleOrigin();
    CCSize size = CCDirector::sharedDirector()->getWinSize();
    x = size.width;
    y = size.height+origin.y;

    CCNode *bg1=CCNode::getChildByTag(99);
    CCSprite *sp1=(CCSprite*)bg1;

    CCNode *bg2=CCNode::getChildByTag(98);
    CCSprite *sp2=(CCSprite*)bg2;
    sp1->setPosition(CCPoint(sp1->getPositionX()-0.5,sp1->getPositionY()));
    sp2->setPosition(CCPoint(sp2->getPositionX()-0.5,sp2->getPositionY()));
    if(sp1->getPositionX()<=-sp1->getContentSize().width)
    {
        sp1->setPosition(CCPoint(sp1->getContentSize().width,y/2));
    }
    if(sp2->getPositionX()<=-sp2->getContentSize().width)
    {
        sp2->setPosition(CCPoint(sp2->getContentSize().width,y/2));
    }
}


ok,以上兩個函數就能完成,就差最后一句話了就搞定了:

this->schedule(schedule_selector(LoginScenes::movebd)); 


然后我們看一下效果:

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM