您好,登錄后才能下訂單哦!
相信大家在玩游戲的過程中都會遇到一個loading的界面,loading界面的作用主要是為了加載游戲中需要用到的資源。在比較大型的游戲中,資源通常會占用很大的空間,如果不做一個預加載,在切換界面的過程中很容易造成卡屏的現象。
下面先給出運行效果。
今天要講解的內容便是加載界面中的進度條控件的使用方法,在這里我們只學習控件的使用,不講解加載過程的邏輯處理。
所謂的進度條,其實不過是兩張紋理的組合,其中一個紋理全部顯示出來,而另一個紋理會隨著加載的過程有一定的變化,我們可以為它設置一個動作,也可以直接設置它顯示的百分比,首先我們來看一下兩張圖片 :
這就是未加載時和加載完成后的進度條顯示,加載完成后,第二個紋理完全遮住了第一個紋理,但事實上他們是兩個紋理。
先給出實現代碼。
1. .h文件中聲明全局變量。
1 2 3 | CCSprite * loadBkSpr; CCProgressTimer * loadBar; //進度條 CCSprite *loadSprite; //加載奔跑蘿莉 |
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 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 | bool GameMain::init() { if ( !CCLayer::init() ) { return false ; } CCSize size = CCDirector::sharedDirector()->getWinSize(); //返回 CCMenuItemImage *back = CCMenuItemImage::create( "backA.png" , "backB.png" , this ,menu_selector(GameMain::menuBackCallback)); if (size.height > 500) { back->setScale(2.0f); } back->setPosition(ccp(size.width - 60,size.height - 60)); back->setEnabled( false ); CCMenu* mainmenu = CCMenu::create(back,NULL); mainmenu->setPosition(ccp(0,0)); this ->addChild(mainmenu,3,4); //加載效果 1.進度條 2.奔跑小人 //1.進度條 loadBkSpr=CCSprite::create( "loading_1_1.png" ); //加載進度條的邊框精靈 loadBkSpr->setPosition(ccp(size.width/2,size.height/2+size.height/4)); loadBkSpr->setScale(3.0f); this ->addChild(loadBkSpr); loadBar=CCProgressTimer::create(CCSprite::create( "loading_1_2.png" )); loadBar->setPercentage(1.0f); //設置百分比,初始為0 loadBar->setPosition(ccp(size.width/2,size.height/2+size.height/4)); loadBar->setType(kCCProgressTimerTypeBar); //設置進度條為水平類型 loadBar->setBarChangeRate(ccp(1,0)); //設置進度條的寬高變化,此處為寬度變化 loadBar->setMidpoint(ccp(0, 0)); //設置動畫運動方向從左至右 loadBar->setScale(3.0f); this ->addChild(loadBar); //設置一個動作,令進度條10秒內讀取到百分之100 CCProgressTo * action= CCProgressTo::create(4, 100); //加載完畢.移除加載動畫,進入游戲場景 loadBar->runAction(CCSequence::create(action,CCCallFunc::create( this , callfunc_selector(GameMain::loadSuccess)),NULL)); //2.奔跑小人 loadSprite = CCSprite::create( "s_1.png" ); CCAnimation * animation = CCAnimation::create(); animation->addSpriteFrameWithFileName( "s_1.png" ); animation->addSpriteFrameWithFileName( "s_2.png" ); animation->addSpriteFrameWithFileName( "s_3.png" ); animation->addSpriteFrameWithFileName( "s_4.png" ); animation->addSpriteFrameWithFileName( "s_5.png" ); animation->addSpriteFrameWithFileName( "s_6.png" ); animation->setDelayPerUnit(0.1f); animation->setRestoreOriginalFrame( true ); loadSprite->setPosition(ccp(100, size.height/4)); //運行奔跑動畫 loadSprite->runAction(CCRepeatForever::create(CCAnimate::create(animation))); CCMoveTo *moveTo = CCMoveTo::create(4, ccp(1000, size.height/4)); loadSprite->runAction(moveTo); this ->addChild(loadSprite); return true ; } //加載完畢.移除加載動畫,進入游戲場景, void GameMain::loadSuccess() { loadBar->removeFromParent(); loadBkSpr->removeFromParent(); loadSprite->removeFromParent(); } |
我們所展示的進度條只不過是一個假的進度條,因為它并不是隨著資源加載的百分比而變化的,事實上我們可以設置一個回調函數,在資源加載的過程中調用,并隨著加載進度設置進度條的百分比,例如:
CCTextureCache::sharedTextureCache()->addImageAsync("HelloWorld.png”,this,callfuncO_selector(newScene::loadCallBack));
此處就不過多講解了。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。