[?李華明Himi?](http://www.himigame.com/about-himi)原創,轉載務必在明顯處注明:
轉載自[【黑米GameDev街區】](http://www.himigame.com/)?原文鏈接:?[http://www.himigame.com/iphone-cocos2d/491.html](http://www.himigame.com/iphone-cocos2d/491.html "【iOS-Cocos2d游戲開發之十五】詳解CCProgressTimer")
[](http://blog.csdn.net/xiaominghimi/article/details/6885825)
游戲開發中難免用到進度條,例如做一些游戲技能的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!
備注:童鞋們在使用引擎做游戲的時候,肯定會遇到一些根本無法通過引擎提供的方法去解決,那么我們可以直接去修改源碼來解決問題,而不是一味的順從引擎,這才能體現出引擎開源的好處啦。嘿嘿;
好啦,這一篇就介紹到這里,繼續忙了.....。
- 前言
- 【Iphone 游戲開發】游戲引擎剖析
- [Object-C語言隨筆之一]Mac os 下搭建iOS開發環境
- [Object-C語言隨筆之二] 《NSLog》常用的打印調試語句與自動排版
- [Object-C語言隨筆之三] 類的創建和實例化以及函數的添加和調用!
- [Object-C語言隨筆之四]創建視圖并繪制簡單圖形
- 【iOS-Cocos2d游戲開發之一】搭建cocos2d游戲引擎環境HelloWorld!
- 【iOS-Cocos2d游戲開發之二】Cocos2D 游戲開發資源貼(教程以及源碼)
- 【iOS-Cocos2d游戲開發之三】CCScene切換的所有特效(28種)以及設置屏幕橫豎屏!
- 【iOS-Cocos2d游戲開發之四】獨自收集Cocos2d提供的字體!共57種(有對照的字體圖)
- 【iOS-Cocos2d游戲開發之五】多觸點與觸屏事件詳解(單一監聽、事件分發)【11月28日更新】
- 【iOS-Cocos2d游戲開發之六】對觸屏事件追加講解,解決無法觸發ccTouchMoved事件[重要!]
- 【iOS-Cocos2d游戲開發之七】在cocos2d中添加/刪除系統組件,并解決View設置透明會影響View中的其他組件的問題!【11月28日更新解決添加組件Cocos2d動畫停止播放的BUG】
- 【iOS-Cocos2d游戲開發之八】開啟高清(960*640)模式問題與解答、圖片適配以及設置iphone橫豎屏
- 【iOS-Cocos2d游戲開發之九】講解CCSpriteBatchNode與TP工具的".pvr.ccz",".plist"共用的終極精靈優化及注意事項!
- 【iOS-Cocos2d游戲開發之十】添加粒子系統特效并解決粒子特效與Layer之間的坐標問題;
- 【iOS-Cocos2d游戲開發之十一】使用Box2d物理系統以及在cocos2d框架添加Box2d物理系統lib包的方法
- 【iOS-Cocos2d游戲開發之十二】淺析使用C++/C/OC進行iOS游戲混編出現“failed with exit”問題與小結;
- 【iOS-Cocos2d游戲開發之十三】CCSprite利用Bezier(貝塞爾)做拋物線動作并讓CCSprite同時播放兩個Action動作!
- 【iOS-Cocos2d游戲開發之十四】音頻/音效/視頻播放(利用Cocos2D-iPhone-Extensions嵌入Cocos2d進行視頻播放!)
- 【iOS-Cocos2d游戲開發之十五】詳解CCProgressTimer 進度條并修改cocos2d源碼實現“理想”游戲進度條!
- 【iOS-Cocos2d游戲開發之十六】添加本地通知(UILocalNotification)以及添加系統組件滾動視圖(UIScrollView)!【2011年11月15日更新】
- 【iOS-Cocos2d游戲開發之十七】靈活使用精靈可視區域(TextureRect)與錨點(anchorPoint),并結合可視區域與錨點制作進度條!
- 【iOS開發必備指南合集】申請企業級IDP、真機調試、游戲接入GameCenter 指南(實現仿官方的成就提示)、游戲接入OpenFeint指南;
- 【iOS-Cocos2d游戲開發之十八】解決滾屏背景/拼接地圖有黑邊(縫隙)/動畫播放出現毛邊以及禁止游戲中自動鎖屏問題!【2011年12月18日補充】
- 【iOS開發必收藏】詳解iOS應用程序內使用IAP/StoreKit付費、沙盒(SandBox)測試、創建測試賬號流程!【2012-12-11日更新獲取"產品付費數量等于0的問題"】
- 【iOS-cocos2d-X 游戲開發之一】在Mac下結合Xcode搭建Cocos2d-X開發環境!
- 【iOS-cocos2d-X 游戲開發之二】【必看篇】總結闡述Cocos2d-X與Cocos2d-iphone區別;
- 【iOS-Cocos2d游戲開發之十九】游戲數據存儲的四種常用方式NSKeyedArchiver/NSUserDefaults/Write寫入/SQLite3
- 【iOS-Cocos2d游戲開發之二十】精靈的基礎知識點總匯(位圖操作/貼圖更換/重排z軸等)以及利用CCSprite與CCLayerColor制作簡單遮蓋層!
- 【iOS-Cocos2d游戲開發之二十一 】自定義精靈類并為你的精靈設置攻擊幀(指定開始幀)以及擴展Cocos2d源碼的CCAnimation簡化動畫創建!
- 【iOS-Cocos2d游戲開發之二十二 】CCSpeed實現CCAnimate動畫進行時設置慢動作以及設置游戲加減速進行(塔防游戲必備)!
- 【iOS-cocos2d-X 游戲開發之三】Mac下配置Android NDK環境并搭建Cocos2d-x環境并Eclipse正常編譯運行Cocos2dX自帶TestsDemo項目!
- 【iOS-cocos2d-X 游戲開發之四】Cocos2dX創建Android NDK新項目并編譯導入Eclipse中正常運行!
- 【iOS-cocos2d-X 游戲開發之五】游戲存儲之Cocos2dX自帶CCUserDefault類詳解;
- 【iOS-cocos2d-X 游戲開發之六】使用Base64算法對Cocos2dX自帶CCUserDefault游戲存儲數據編碼!
- 【iOS-cocos2d-X 游戲開發之七】整合Cocos2dX的Android項目到Xcode項目中,Xcode編寫&編譯代碼,Android導入打包運行即可!
- 【iOS-iap防護】驗證用戶付費收據!拒絕iap Cracker!拒絕iap Free!讓iphone越獄用戶無從下手!【2012年5月2日更新防護iap Free的方法】
- 【COCOS2DX-LUA 腳本開發之一】在Cocos2dX游戲中使用Lua腳本進行游戲開發(基礎篇)并介紹腳本在游戲中詳細用途!
- 【iOS-cocos2d-X 游戲開發之九】Cocos2dx利用CCSAXParser解析xml數據&CCMutableDictionary使用與注意!
- 【iOS-cocos2d-X 游戲開發之十】自定義CCSprite/Layer/CCNode及靜態類模版&自定義類細節說明&Cocos2dx觸屏事件講解
- 【iOS-cocos2d-X 游戲開發之十一】New CCSprite()帶來的錯誤&使用CCUserDefault及pvr.ccz在Cocos2dx中要注意!
- 【iOS-cocos2d-X 游戲開發之十二】自定義Cocos2dx搖桿(增強Joystick),增加搖桿跟隨用戶觸點作為搖桿坐標,讓搖桿不再死板!
- 【iOS-cocos2d-X 游戲開發之十三】詳細講解在Xcode中利用預編譯并通過Jni調用Android的Java層代碼(cocos2dx里訪問調用Android函數)!
- 【iOS-cocos2d-X 游戲開發之十四】Xcode中c++&Object-C混編,詳細介紹如何在cocos2dx中訪問object函數以及Apple Api
- 【iOS-cocos2d-X 游戲開發之十五】Cocos2dx中響應Android的Back(返回)與Menu(小房子)事件&&Cocos2dx自動釋放粒子內存函數!
- 【iOS-cocos2d-X 游戲開發之十六】配置你的Cocos2dx項目編譯后的Android自動使用(-hd)高清圖&設置Android自適應屏幕、縮放比例方法!
- 【Cocoa(mac) Application 開發系列之四】動作編輯器(Cocos2dx)制作流程詳解及附上響應鼠標滾軸事件、反轉坐標系、導入/創建資源目錄等知識點代碼!
- 【Cocos2d-X(2.x) 游戲開發系列之一】cocos2dx(v2.x)與(v1.x)的一些常用函數區別講解!在2.x版CCFileData類被去除等
- 【Cocos2d-X(2.x) 游戲開發系列之二】cocos2dx最新2.0.1版本跨平臺整合NDK+Xcode,Xcode編寫&編譯代碼,Android導入打包運行即可!
- 【Cocos2dX(2.x)_Lua開發之三】★重要必看篇★在Lua中使用自定義精靈(Lua腳本與自創建類之間的訪問)及Lua基礎講解
- 【Cocos2d-X(2.x) 游戲開發系列之三】最新版本cocos2d­2.0­x­2.0.2使用新資源加載策略!不再沿用-hd、-ipad、-ipadhd添加后綴方式
- 【Cocos2d-X(1.x 2.x) 修復篇】iOS6 中 libcurl.a 無法通過armv7s編譯以及iOS6中無法正常游戲橫屏的解決方法
- 【Cocos2d-X(1.x 2.x) 】iOS6與iphone5適相關設置隨筆(解決第三方類庫無法通過armv7s編譯的方法、添加Default-568h@2x.png)