Cocos2d-x CCProgressTimer


CCProgressTimer,創建使用這個節點可以大致實現兩個作用的效果:

其一:在游戲中幾乎大部分的游戲啟動界面都是游戲加載畫面,那么用到的一般是進度條提示加載進度,其使用的就是CCProgressTimer。

其二:在游戲中需要對精靈的出現等動作制作一些漸顯的效果。

 

(1)類型一般就是兩種:

 

[cpp]  view plain copy
 
  1. typedef enum {  
  2.     /// Radial Counter-Clockwise  
  3.     kCCProgressTimerTypeRadial,  
  4.     /// Bar  
  5.     kCCProgressTimerTypeBar,  
  6. } CCProgressTimerType;  


(2)類型1:radial(環形)

 

 

[cpp]  view plain copy
 
  1. CCSize wSize = CCDirector::sharedDirector()->getWinSize();  
  2.     progressTimer = CCProgressTimer::create(CCSprite::create("progress.gif"));  
  3.     progressTimer->setType(kCCProgressTimerTypeRadial);  
  4.     // 默認的情況下,環形漸變的方向是:順時針  
  5.     // 改變其漸變的方向 Makes the ridial CCW (逆時針)  
  6.     progressTimer->setReverseProgress(true);  
  7.     progressTimer->setPosition(wSize.width/2,wSize.height/2);  
  8.     this->addChild(progressTimer);  

 


(3)類型2:bar  (條形:包括vertical 和 horizontal)

漸變的方向問題:

vertical豎直方法包括從上到下和從下到上;

horizontal水平方向包括從左到右和從右到左。

這里涉及到兩個設置參數:

首先是setMidpoint設置起點

 

[cpp]  view plain copy
 
  1. /** 
  2.      *    Midpoint is used to modify the progress start position. 
  3.      *    If you're using radials type then the midpoint changes the center point 
  4.      *    If you're using bar type the the midpoint changes the bar growth 
  5.      *        it expands from the center but clamps to the sprites edge so: 
  6.      *        you want a left to right then set the midpoint all the way to ccp(0,y) 
  7.      *        you want a right to left then set the midpoint all the way to ccp(1,y) 
  8.      *        you want a bottom to top then set the midpoint all the way to ccp(x,0) 
  9.      *        you want a top to bottom then set the midpoint all the way to ccp(x,1) 
  10.      */  


其次是setBarChangeRate設置變化rate

 

 

[cpp]  view plain copy
 
  1. /** 
  2.      *    This allows the bar type to move the component at a specific rate 
  3.      *    Set the component to 0 to make sure it stays at 100%. 
  4.      *    For example you want a left to right bar but not have the height stay 100% 
  5.      *    Set the rate to be ccp(0,1); and set the midpoint to = ccp(0,.5f); 
  6.      */  


如果不用變化的方向,則設置該方向為0,否則設置為1。

 

 

[cpp]  view plain copy
 
  1. CCSize wSize = CCDirector::sharedDirector()->getWinSize();  
  2.     progressTimer = CCProgressTimer::create(CCSprite::create("progress.gif"));  
  3.     progressTimer->setType(kCCProgressTimerTypeBar);  
  4.       
  5.     //從左到右  
  6.     progressTimer->setMidpoint(ccp(0, 0.5));  
  7.     progressTimer->setBarChangeRate(ccp(1, 0));  
  8.       
  9.     //從右到左  
  10. //    progressTimer->setMidpoint(ccp(1, 0.5));  
  11. //    progressTimer->setBarChangeRate(ccp(1, 0));  
  12.       
  13.     //從上到下  
  14. //    progressTimer->setMidpoint(ccp(0.5, 1));  
  15. //    progressTimer->setBarChangeRate(ccp(0, 1));  
  16.       
  17.     //從下到上  
  18. //    progressTimer->setMidpoint(ccp(0.5, 0));  
  19. //    progressTimer->setBarChangeRate(ccp(0, 1));  
  20.       
  21.     progressTimer->setPosition(wSize.width/2,wSize.height/2);  
  22.     this->addChild(progressTimer);  


(4) 執行變化

 

①、如果是要實現精靈漸變的顯示效果:

創建CCProgressTo或者是CCProgressFromTo動作,讓CCProgressTimer執行。
CCProgressTo和CCProgressFromTo的區別是:

前者:Progress to percentage(初始化有兩個參數)(float duration, float fPercent)

后者:Progress from a percentage to another percentage(初始化有三個參數)(float duration, float fFromPercentage, float fToPercentage)

 

[cpp]  view plain copy
 
  1. CCProgressTo *progressTo = CCProgressTo::create(2.0, 100);  
  2.     //等價於:  
  3.     //CCProgressFromTo *progressFromTo = CCProgressFromTo::create(2.0, 0, 100);  
  4.     progressTimer->runAction(CCRepeatForever::create(progressTo));  


②、如果是要實現加載進度條的效果:

 

需要重載update方法,在這個方法中實現進度條percentage的變化。

 

[cpp]  view plain copy
 
  1. this->scheduleUpdate();  

 

[cpp]  view plain copy
 
  1. void HelloWorld::update(float dt)  
  2. {  
  3.     float percentage = progressTimer->getPercentage();  
  4.       
  5.     if (percentage < 100) {  
  6.         percentage += 1;  
  7.         progressTimer->setPercentage(percentage);  
  8.     }  
  9. }  

 

 

關於CCProgressTimer的更加詳細的使用 demo可以參看引擎中sample中的ActionProgressTest。


免責聲明!

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



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