溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Cocos2dx學(xué)習(xí)筆記12:cocos2dx進(jìn)度條(ProgressTimer)

發(fā)布時(shí)間:2020-07-28 23:21:11 來源:網(wǎng)絡(luò) 閱讀:706 作者:frankxzb 欄目:開發(fā)技術(shù)

在游戲開發(fā)中,我們通常需要做一個(gè)游戲的進(jìn)度條來過渡游戲的場(chǎng)景切換或者顯示游戲資源的加載進(jìn)度。

同樣的來說,進(jìn)度條可以在角色扮演游戲中作為玩家或者怪物頭頂?shù)纳鼦l,或者消除類休閑游戲的倒計(jì)時(shí)等。進(jìn)度條多種多樣,如何合理的使用根據(jù)游戲的項(xiàng)目需求而定。

cocos2dx中,進(jìn)度條使用 ProgressTimer 來實(shí)現(xiàn),首先要定義精靈綁定進(jìn)度條。

打開我們創(chuàng)建的項(xiàng)目cocosxuexi,直接改寫init()初始化里的代碼來實(shí)現(xiàn),先把以前寫的代碼注釋掉。

1、首先在HelloWorldScene.h文件里定義2個(gè)指針。

public:

virtualvoid update(float dt);//默認(rèn)調(diào)度器

private:

ProgressTimer* progress1;//定義進(jìn)度條指針

LabelTTF* numsTTF;//定義標(biāo)簽指針


2、HelloWorldScene.cppinit()方法里創(chuàng)建一個(gè)進(jìn)度條和一個(gè)進(jìn)度條的邊框

Size visibleSize = Director::getInstance()->getVisibleSize();

Vec2 origin = Director::getInstance()->getVisibleOrigin();

//創(chuàng)建一個(gè)進(jìn)度條精靈邊框  

auto progressbgSprite=Sprite::create("loadKuang.png");  

  progressbgSprite->setPosition(Vec2(origin.x + visibleSize.width/2,origin.y + visibleSize.height/2));    

this->addChild(progressbgSprite, 1);  


//創(chuàng)建一個(gè)進(jìn)度條精靈

auto progressSprite=Sprite::create("loadBar.png");  

  progress1=ProgressTimer::create(progressSprite);      

  progress1->setType(kCCProgressTimerTypeBar);      

  progress1->setPosition(Vec2(origin.x + visibleSize.width/2,origin.y + visibleSize.height/2));    

//進(jìn)度動(dòng)畫運(yùn)動(dòng)方向,可以多試幾個(gè)值,看看效果  

  progress1->setMidpoint(Vec2(0, 0));      

//進(jìn)度條寬高變化  

  progress1->setBarChangeRate(Vec2(1, 0));      

  progress1->setPercentage(0); //設(shè)置進(jìn)度條百分比為0%

this->addChild(progress1, 1);    

  numsTTF=CCLabelTTF::create("0", "Thonburi", 18);      

  numsTTF->setPosition(origin.x + visibleSize.width/2,origin.y + visibleSize.height/2);      

this->addChild(numsTTF, 1);  

  scheduleUpdate();  //默認(rèn)調(diào)度器,調(diào)用update()方法



   3、HelloWordScene.cpp里實(shí)現(xiàn)update()方法


voidHelloWorld::update(floatdt)

{

float cu=progress1->getPercentage();  //獲取百分比    

   cu=cu+1.0f;  //進(jìn)度條進(jìn)度 每次加1%      

   progress1->setPercentage(cu);  


if (cu <= 100)    //如果進(jìn)度小于等于100%  

   {

auto str1 = String::createWithFormat("%.2f%%",cu);  

numsTTF->setString(str1->getCString());  //設(shè)置標(biāo)簽顯示內(nèi)容

   }

//如果進(jìn)度條達(dá)到100%,則停止

else

   {

unscheduleUpdate();//停止默認(rèn)調(diào)度器

}

}


到此一個(gè)可用的進(jìn)度條就已經(jīng)實(shí)現(xiàn)了。如果用來實(shí)現(xiàn)場(chǎng)景自動(dòng)切換,直接在update()里停止調(diào)度器后就實(shí)現(xiàn)自動(dòng)切換操作。

效果預(yù)覽:

Cocos2dx學(xué)習(xí)筆記12:cocos2dx進(jìn)度條(ProgressTimer)


Cocos2dx學(xué)習(xí)筆記12:cocos2dx進(jìn)度條(ProgressTimer) 

http://www.byjth.com/biji/32.html


向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI