【iOS-Cocos2d遊戲開發之十五】詳解CCProgressTimer 進度條並修改cocos2d源碼實現“理想”遊戲進度條!

來源:互聯網
上載者:User

  

 李華明Himi 原創,轉載務必在明顯處註明:
轉載自【黑米GameDev街區】 原文連結: http://www.himigame.com/iphone-cocos2d/491.html

         遊戲開發中難免用到進度條,例如做一些遊戲技能的CD時間等都會使用到;那麼cocos2d當然也封裝了進度條,但是不太理想,如果童鞋們用過就應該知道,那麼今天介紹兩個知識點,第一:介紹cocos2d中的進度條CCProgressTimer如何使用;第二點:修改cocos2d封裝的CCProgressTimer源碼,實現“理想”形式的進度條;

        OK,首先來學習下如何在cocos2d中使用CCProgressTimer進度條:

        在cocos2d中使用進度條很簡單,建立進度條並添加到當前layer的代碼如下,童鞋們一看就懂:

 CCProgressTimer *ct=[CCProgressTimer progressWithFile:@"icon.png"];        ct.position=ccp( size.width /2 , size.height/2);         [self addChild:ct z:0 tag:90];

         很簡單的建立,那麼如果急躁的童鞋們只是到這裡就立刻run你的項目,那麼肯定看不到進度條,不用擔心,看不到就對了;

         進度條它在cocos2d封裝的時候,預設有一個最大進度值 100,最小 0,那麼你建立的時候預設的當前進度是0,所以是看不到的;

         下面來看兩個進度條比較重要的兩個屬性:

        ct.percentage = 0; //當前進度        ct.type=kCCProgressTimerTypeHorizontalBarLR;//進度條的顯示樣式

          percentage 指的是當前進度條的進度值,那麼想讓一個進度條正常顯示出來,那麼需要percentage!=0才行,一般都會在一個不斷重新整理的函數中讓其進度條不斷++,進而實現其進度條功能;

          這裡我就簡單寫下代碼:

                 1.首先在init函數中,添加  :[self scheduleUpdate];

                 2. 然後添加如下函數即可:(這個函數中就是讓當前進度不斷++,大等於100就還原當前進度值為0,讓其迴圈)  

-(void)update:(ccTime)himi{    CCProgressTimer*ct=(CCProgressTimer*)[self getChildByTag:90];     ct.percentage++;    if(ct.percentage>=100){        ct.percentage=0;    }}

               

          type屬性也是很容易理解的,就是進度條的類型,在cocos2d中封裝了以下6種顯示方式:

        kCCProgressTimerTypeRadialCCW,         扇形逆時針形式        kCCProgressTimerTypeRadialCW,          扇形順時針形式        kCCProgressTimerTypeHorizontalBarLR,   從左往右增張的形式        kCCProgressTimerTypeHorizontalBarRL,   從右往左增張的形式        kCCProgressTimerTypeVerticalBarBT,     從下往上增張的形式        kCCProgressTimerTypeVerticalBarTB,     從上往下增張的形式

    

          為了讓童鞋們更清楚今天要講的第二點知識,所以這裡我將這些形式出來,大家先看下:

           kCCProgressTimerTypeRadialCCW 與 kCCProgressTimerTypeRadialCW的樣式如: 

                              

           kCCProgressTimerTypeHorizontalBarLR 與  kCCProgressTimerTypeHorizontalBarRL 的樣式如:

                        


           kCCProgressTimerTypeVerticalBarBT 與 kCCProgressTimerTypeVerticalBarTB   的樣式如:

                            

 

   OK,簡單的介紹了進度條的使用和樣式後,那麼請各位童鞋用10秒時間仔細觀察3類樣式!!!

        童鞋們可能已經看出了一些端倪,這裡假設我們有一個技能需要做成有CD時間的,那麼如果我們採用進度條,那麼這個進度條需要一張圖片,我們一般會使用陰影作為進度表示CD時間進而顯示,如:(我將一張半透明的灰色圖作為進度條,下面的cocos2d的icon當成技能!這裡進度條的樣式選擇從下往上的形式)

                            

      大家仔細觀察,進度條(灰色塊)逆時針增加,等到了最大進度值100的時候正好黑色塊會將技能(icon圖)給遮擋住......悲劇啊,這哪是技能CD啊,反了吧!!!!

一般技能CD時間過後應該正好將技能icon全部露出來,也就是說正確的應該是進度條在0進度的時候正好全部遮擋技能icon,噹噹前進度為最大100的時候正好這個遮擋的灰色塊應該正好沒有,這樣才對啊,這正好反了。。。。。

  最簡單的解決方式就是將進度條的當前進度值初始化設定100,然後不斷減少就好了;

      當然啦,Himi 索性去cocos2d裡對CCProgressTimer源碼進行了修改:

      首先進入 cocos2d的CCProgressTimer.m 源碼中,然後搜尋以下代碼:

float alpha = percentage_ / 100.f;

     然後再其下方添加如下代碼:

    if(alpha != 0.f && alpha !=1.f)    {        alpha = 1.f-alpha;    }

      然後直接運行項目,如下:

               

  

          這才是對的啊,當進度條的當前進度是0的時候正好覆蓋技能icon,當進度條的當前進度值最大100的時候正好將技能icon全部展漏了出來;這個才是正確的技能CD!

          備忘:童鞋們在使用引擎做遊戲的時候,肯定會遇到一些根本無法通過引擎提供的方法去解決,那麼我們可以直接去修改源碼來解決問題,而不是一味的順從引擎,這才能體現出引擎開源的好處啦。嘿嘿;

 

         好啦,這一篇就介紹到這裡,繼續忙了.....。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.