Cocos2d-X中的ProgressTimer

缺乏、安全感 2022-08-06 11:26 260阅读 0赞

转载自:http://www.2cto.com/kf/201410/344391.html

ProgressTimer即进度条,进度条在游戏开发中运用非常广泛,例如在一些格斗游戏中,显示血液的变化,还有游戏加载进度,等都离不开进度条

Cocos2d-X中使用CCProgressTimer创建进度条

先从一个简单的例子使用ProgressTimer屏蔽部分精灵

首先在工程目录下的Resource文件夹中放一张图片

\\

然后创建一个ProgressTimer类

在ProgressTimer.h中添加下面的代码

?










1


2


3


4


5


6


7


8


9


10


11


12


13


14


15


16


17


18


19



#ifndef ProgressTimer_H


#define ProgressTimer_H


 


#include
“cocos2d.h”


USINGNSCC;


 


class
ProgressTimer :
public
CCLayer


{


public
:


    
virtual bool init(); 


 


    
static
CCScene* scene();


     


    
CREATE_FUNC(ProgressTimer);


 


   
void
scheduleFunc(
float
dt);


};


 


#endif
// __ProgressTimer_H


在ProgressTimer.cpp中添加下面的代码

?










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



#include
“ProgressTimer.h”


 


CCScene ProgressTimer::scene()


{


    
CCScene
scene = CCScene::create();


     


    
ProgressTimer layer = ProgressTimer::create();


 


    
scene->addChild(layer);


 


    
return
scene;


}


 


bool ProgressTimer::init()


{


    
//初始化父类


    
CCLayer::init();


 


    
//得到窗口的大小


    
CCSize winSize = CCDirector::sharedDirector()->getWinSize();


 


    
//设置坐标


    
CCPoint center = ccp(winSize.width /
2
, winSize.height /
2
);


 


    
//创建精灵


    
CCSprite
sprite = CCSprite::create(
“labelatlasimg.png”
);


    


    
//用精灵创建进度条


    
CCProgressTimer* progress = CCProgressTimer::create(sprite);


    
addChild(progress);


 


    
//设置进度条的位置


    
progress->setPosition(center);


 


    
//设置百分比(显示进度条的50%)


    
progress->setPercentage(
50
);


 


    
return
true
;


}

执行结果:
\\

实例2:显示前半部分

?










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



#include
“ProgressTimer.h”


 


CCScene ProgressTimer::scene()


{


    
CCScene
scene = CCScene::create();


     


    
ProgressTimer layer = ProgressTimer::create();


 


    
scene->addChild(layer);


 


    
return
scene;


}


 


bool ProgressTimer::init()


{


    
//初始化父类


    
CCLayer::init();


 


    
//得到窗口的大小


    
CCSize winSize = CCDirector::sharedDirector()->getWinSize();


 


    
//设置坐标


    
CCPoint center = ccp(winSize.width /
2
, winSize.height /
2
);


 


    
//创建精灵


    
CCSprite
sprite = CCSprite::create(
“labelatlasimg.png”
);


    


    
//用精灵创建进度条


    
CCProgressTimer* progress = CCProgressTimer::create(sprite);


    
addChild(progress);


 


    
//设置进度条的位置


    
progress->setPosition(center);


 


    


 


    
//设置进度条的模式


    
//kCCProgressTimerTypeBar表示条形模式


    
//默认的模式是kCCProgressTimerTypeRadial(圆圈模式)


    
progress->setType(kCCProgressTimerTypeBar);


 


    
//设置进度条变化的方向


    
//setMidpoint默认在左边


    
//ccp(1,0)表示在X轴方向上有变化,在y轴方向上没变化


      
//ccp(0,1)表示在X轴方向上没有变化,在y轴方向上有变化


    
progress->setBarChangeRate(ccp(
1
,
0
));


 


    
//从哪个方向开始变化


    
//ccp(0,0)表示从左边开始变化


    
progress->setMidpoint(ccp(
0
,
0
));


 


 


   
//设置百分比(显示进度条的50%)


    
progress->setPercentage(
50
);


 


    
return
true
;


}

执行结果:

\\

ProgressTimer实现旋转效果的进度条

程序代码:

?










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



#include
“ProgressTimer.h”


 


CCScene ProgressTimer::scene()


{


    
CCScene
scene = CCScene::create();


     


    
ProgressTimer layer = ProgressTimer::create();


 


    
scene->addChild(layer);


 


    
return
scene;


}


 


bool ProgressTimer::init()


{


    
//初始化父类


    
CCLayer::init();


 


    
//得到窗口的大小


    
CCSize winSize = CCDirector::sharedDirector()->getWinSize();


 


    
//设置坐标


    
CCPoint center = ccp(winSize.width /
2
, winSize.height /
2
);


 


    
//创建精灵


    
CCSprite
sprite = CCSprite::create(
“labelatlasimg.png”
);


    


    
//用精灵创建进度条


    
CCProgressTimer progress = CCProgressTimer::create(sprite);


    
addChild(progress);


 


    
//设置进度条的位置


    
progress->setPosition(center);


 


 


    
//设置progress的ID为100


    
progress->setTag(
100
);


 


    
//定义一个定时器


    
schedule(schedule_selector(ProgressTimer::scheduleFunc),
0
.5f);


 


    
return
true
;


}


 


void
ProgressTimer::scheduleFunc(
float
dt)


{


    
//通过进度条的ID得到进度条


    
CCProgressTimer
progress = (CCProgressTimer*)getChildByTag(
100
);


     


    
progress->setPercentage(progress->getPercentage() +
1
);


     


    
if
(progress->getPercentage() >=
100
)


    
{


        
unscheduleAllSelectors();


    
}


}

执行结果:

\\

ProgressTimer实现进度条2

程序代码:

?










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



#include
“ProgressTimer.h”


 


CCScene ProgressTimer::scene()


{


    
CCScene
scene = CCScene::create();


     


    
ProgressTimer layer = ProgressTimer::create();


 


    
scene->addChild(layer);


 


    
return
scene;


}


 


bool ProgressTimer::init()


{


    
//初始化父类


    
CCLayer::init();


 


    
//得到窗口的大小


    
CCSize winSize = CCDirector::sharedDirector()->getWinSize();


 


    
//设置坐标


    
CCPoint center = ccp(winSize.width /
2
, winSize.height /
2
);


 


    
//创建精灵


    
CCSprite
sprite = CCSprite::create(
“labelatlasimg.png”
);


    


    
//用精灵创建进度条


    
CCProgressTimer progress = CCProgressTimer::create(sprite);


    
addChild(progress);


 


    
//设置进度条的位置


    
progress->setPosition(center);


 


    
//设置进度条的模式


    
//kCCProgressTimerTypeBar表示条形模式


    
progress->setType(kCCProgressTimerTypeBar);


 


    
//设置进度条变化的方向


    
//setMidpoint默认在左边


    
//ccp(1,0)表示向右变化


    
progress->setBarChangeRate(ccp(
1
,
0
));


 


    
//从哪个方向开始变化


    
//ccp(0,0)表示从左边开始变化


    
progress->setMidpoint(ccp(
0
,
0
));


 


    
//设置progress的ID为100


    
progress->setTag(
100
);


 


    
//定义一个定时器


    
schedule(schedule_selector(ProgressTimer::scheduleFunc),
0
.1f);


 


    
return
true
;


}


 


void
ProgressTimer::scheduleFunc(
float
dt)


{


    
//通过进度条的ID得到进度条


    
CCProgressTimer
progress = (CCProgressTimer*)getChildByTag(
100
);


     


    
progress->setPercentage(progress->getPercentage() +
1
);


     


    
if
(progress->getPercentage() >=
100
)


    
{


        
unscheduleAllSelectors();


    
}


}

执行结果:

\\

<喎�”http://www.2cto.com/kf/ware/vc/“ target=”_blank” class=”keylink”>vcD4KPHA+UHJvZ3Jlc3NUaW1lcsq1z9a9+LbIzPUzPC9wPgo8cD7K18/I1Nq5pLPMxL/CvM/CtcRSZXNvdXJjZc7EvP680NbQzO2808G91cW9+LbIzPXNvMasPC9wPgo8cD48aW1nIHNyYz0=”http://www.2cto.com/uploadfile/Collfiles/20141018/201410180912156.png“ alt=”\“>

\\

程序代码:

?










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


70


71


72


73


74


75


76



#include
“ProgressTimer.h”


 


CCScene ProgressTimer::scene()


{


    
CCScene
scene = CCScene::create();


     


    
ProgressTimer layer = ProgressTimer::create();


 


    
scene->addChild(layer);


 


    
return
scene;


}


 


bool ProgressTimer::init()


{


    
//初始化父类


    
CCLayer::init();


 


    
//得到窗口的大小


    
CCSize winSize = CCDirector::sharedDirector()->getWinSize();


 


    
//设置坐标


    
CCPoint center = ccp(winSize.width /
2
, winSize.height /
2
);


     


    
//创建精灵


    
CCSprite
bg = CCSprite::create(
“sliderTrack.png”
);


    
CCSprite sprite = CCSprite::create(
“sliderProgress.png”
);


 


    
//设置精灵的位置


    
bg->setPosition(center);


     


    
//添加精灵


    
addChild(bg);


 


    
//用精灵创建进度条


    
CCProgressTimer
progress = CCProgressTimer::create(sprite);


     


    
//设置进度条的位置


    
progress->setPosition(center);


     


    
//添加进度条


    
addChild(progress);


 


    
//设置进度条的模式为条形模式


    
progress->setType(kCCProgressTimerTypeBar);


     


    
//向右变化


    
progress->setBarChangeRate(ccp(
1
,
0
));


 


    
//从左边开始变化


    
progress->setMidpoint(ccp(
0
,
0
));


 


    
// 设置progress的tag


    
progress->setTag(
100
);


 


    
// 增加一个定时器


    
schedule(schedule_selector(ProgressTimer::scheduleFunc),
0
.1f);


 


    
return
true
;


}


 


void
ProgressTimer::scheduleFunc(
float
dt)


{


    
//通过进度条的ID得到进度条


    
CCProgressTimer progress = (CCProgressTimer)getChildByTag(
100
);


     


    
//设置progress的进度,每调用一次进度加一


    
progress->setPercentage(progress->getPercentage() +
1
);


     


    
//当进度大于或者等于100时


    
if
(progress->getPercentage() >=
100
)


    
{


        
//终止定时器


        
unscheduleAllSelectors();


    
}


}

执行结果:

\\

ProgressTimer实现进度条4

程序代码

?










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


70


71


72


73



#include
“ProgressTimer.h”


 


CCScene ProgressTimer::scene()


{


    
CCScene
scene = CCScene::create();


     


    
ProgressTimer layer = ProgressTimer::create();


 


    
scene->addChild(layer);


 


    
return
scene;


}


 


bool ProgressTimer::init()


{


    
//初始化父类


    
CCLayer::init();


 


    
//得到窗口的大小


    
CCSize winSize = CCDirector::sharedDirector()->getWinSize();


 


    
//设置坐标


    
CCPoint center = ccp(winSize.width /
2
, winSize.height /
2
);


     


    
//创建精灵


    
CCSprite
bg = CCSprite::create(
“sliderTrack.png”
);


    
CCSprite sprite = CCSprite::create(
“sliderProgress.png”
);


 


    
//设置精灵的位置


    
bg->setPosition(center);


     


    
//添加精灵


    
addChild(bg);


 


    
//用精灵创建进度条


    
CCProgressTimer
progress = CCProgressTimer::create(sprite);


     


    
//设置进度条的位置


    
progress->setPosition(center);


     


    
//添加进度条


    
addChild(progress);


 


    
//设置进度条的模式为条形模式


    
progress->setType(kCCProgressTimerTypeBar);


     


    
//向右变化


    
progress->setBarChangeRate(ccp(
1
,
0
));


 


    
// 设置progress的tag


    
progress->setTag(
100
);


 


    
// 增加一个定时器


    
schedule(schedule_selector(ProgressTimer::scheduleFunc),
0
.1f);


 


    
return
true
;


}


 


void
ProgressTimer::scheduleFunc(
float
dt)


{


    
//通过进度条的ID得到进度条


    
CCProgressTimer progress = (CCProgressTimer)getChildByTag(
100
);


     


    
//设置progress的进度,每调用一次进度加一


    
progress->setPercentage(progress->getPercentage() +
1
);


     


    
//当进度大于或者等于100时


    
if
(progress->getPercentage() >=
100
)


    
{


        
//终止定时器


        
unscheduleAllSelectors();


    
}


}

执行结果:

\\

ProgressTimer实现进度条5

程序代码

?










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


70


71


72


73


74


75


76


77


78


79


80


81


82



#include
“ProgressTimer.h”


 


CCScene ProgressTimer::scene()


{


    
CCScene
scene = CCScene::create();


     


    
ProgressTimer layer = ProgressTimer::create();


 


    
scene->addChild(layer);


 


    
return
scene;


}


 


bool ProgressTimer::init()


{


    
//初始化父类


    
CCLayer::init();


 


    
//得到窗口的大小


    
CCSize winSize = CCDirector::sharedDirector()->getWinSize();


 


    
//设置坐标


    
CCPoint center = ccp(winSize.width /
2
, winSize.height /
2
);


     


    
//创建精灵


    
CCSprite
bg = CCSprite::create(
“sliderTrack.png”
);


    
CCSprite sprite = CCSprite::create(
“sliderProgress.png”
);


 


    
//设置精灵的位置


    
bg->setPosition(center);


     


    
//添加精灵


    
addChild(bg);


 


    
//精灵旋转90度


    
bg->setRotation(
90
);


 


    
//用精灵创建进度条


    
CCProgressTimer
progress = CCProgressTimer::create(sprite);


     


    
//设置进度条的位置


    
progress->setPosition(center);


     


    
//添加进度条


    
addChild(progress);


 


    
//进度条旋转90度


    
progress->setRotation(
90
);


 


    
//设置进度条的模式为条形模式


    
progress->setType(kCCProgressTimerTypeBar);


     


    
//向右变化


    
progress->setBarChangeRate(ccp(
1
,
0
));


 


    
//从左边开始变化


    
progress->setMidpoint(ccp(
1
,
0
));


 


    
// 设置progress的ID


    
progress->setTag(
100
);


 


    
// 增加一个定时器


    
schedule(schedule_selector(ProgressTimer::scheduleFunc),
0
.1f);


 


    
return
true
;


}


 


void
ProgressTimer::scheduleFunc(
float
dt)


{


    
//通过进度条的ID得到进度条


    
CCProgressTimer progress = (CCProgressTimer)getChildByTag(
100
);


     


    
//设置progress的进度,每调用一次进度加一


    
progress->setPercentage(progress->getPercentage() +
1
);


     


    
//当进度大于或者等于100时


    
if
(progress->getPercentage() >=
100
)


    
{


        
//终止定时器


        
unscheduleAllSelectors();


    
}


}

执行结果:

\\

ProgressTo实现进度条1

程序代码

?










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



#include
“ProgressTimer.h”


 


CCScene ProgressTimer::scene()


{


    
CCScene
scene = CCScene::create();


     


    
ProgressTimer layer = ProgressTimer::create();


 


    
scene->addChild(layer);


 


    
return
scene;


}


 


bool ProgressTimer::init()


{


    
CCLayer::init();


 


    
CCSize winSize = CCDirector::sharedDirector()->getWinSize();


 


    
CCPoint center = ccp(winSize.width /
2
, winSize.height /
2
);


     


    
CCSprite
bg = CCSprite::create(
“sliderTrack.png”
);


    
CCSprite sprite = CCSprite::create(
“sliderProgress.png”
);


     


    
bg->setPosition(center);


     


    
addChild(bg);


 


    
//精灵旋转90度


    
bg->setRotation(
90
);


 


    
//用精灵创建进度条


    
CCProgressTimer
progress = CCProgressTimer::create(sprite);


     


    
//设置进度条的位置


    
progress->setPosition(center);


     


    
//添加进度条


    
addChild(progress);


 


    
//进度条旋转90度


    
progress->setRotation(
90
);


 


    
//设置进度条的模式为条形模式


    
progress->setType(kCCProgressTimerTypeBar);


     


    
//向右变化


    
progress->setBarChangeRate(ccp(
1
,
0
));


 


    
//从左边开始变化


    
progress->setMidpoint(ccp(
1
,
0
));


 


    
// 设置progress的ID


    
progress->setTag(
100
);


 


    
//用于动画显示Progress进度


    
//第一个参数:时间


    
//第二个参数:进度


    
CCProgressTo* progressTo = CCProgressTo::create(
2
,
100
);


 


    
//执行进度


    
progress->runAction(progressTo);


 


    
return
true
;


}

执行结果:

2014101809121511.gif

发表评论

表情:
评论列表 (有 0 条评论,260人围观)

还没有评论,来说两句吧...

相关阅读

    相关 cocos2dx集合

    2dx提供的集合有两种,数组和字典,数组就是有序的集合,集合里的对象有下标、有顺序,好比排队买票;字典是无序的,但是值得有对应key,比如,中国,有很多省份,省份就是key,下