cocos2d-x 进度条

好了,我们来看看进度条如何来实现,cocos2dx里已经有现成的这个类,叫CCProgressTimer。好了,废话少说,我们直接上代码,看如何来这个类。

 //创建一个进度条精灵,这个是2.0以后api变了
    CCSprite *progressbgSprite=CCSprite::create("time_slot-hd.png");

    progressbgSprite->setPosition(ccp(300, 300));

    this->addChild(progressbgSprite, 1);
    
    
    CCSprite *progressSprite=CCSprite::create("time_bars-hd.png");

    progress1=CCProgressTimer::create(progressSprite);
    
    progress1->setType(kCCProgressTimerTypeBar);
    
    progress1->setPosition(ccp(300, 300));
    
    //进度动画运动方向,可以多试几个值,看看效果
    progress1->setMidpoint(ccp(0, 0));
    
    //进度条宽高变化
    progress1->setBarChangeRate(ccp(1, 0));
    
    progress1->setPercentage(0);
    
    this->addChild(progress1, 1);
    
    
    numsTTF=CCLabelTTF::create("0", "Thonburi", 18);
    
    
    numsTTF->setPosition(ccp(300, 300));
    
    
    this->addChild(numsTTF, 1);
    
    
    this->scheduleUpdate();


void HelloWorld::update(float t)
{

    
    float cu=progress1->getPercentage();
    
    
    cu=cu+0.1f;
    
    
    progress1->setPercentage(cu);
    
    
    CCString *str = CCString::createWithFormat("%.2f%%",cu);

    numsTTF->setString(str->getCString());
    
    
    

}



创建一个CCProgressTimer类,并且在上面显示一个文字变化,并调用系统的方法来刷新界面,OK,看截图

cocos2d-x 进度条_第1张图片


0K。。我们来改变下,设置progress1->setPercentage(100);然后刷新方法里cu=cu-0.1f;

cocos2d-x 进度条_第2张图片


OK,我们换个进度条类型看看,

 CCSprite *progress2Sprite=CCSprite::create("Icon-72.png");
    
    progress2=CCProgressTimer::create(progress2Sprite);
    
    //类型为圆形
    progress2->setType(kCCProgressTimerTypeRadial);
    
    progress2->setPosition(ccp(300, 100));
    
    this->addChild(progress2, 1);

我们看下效果:(下面的小图就是)

cocos2d-x 进度条_第3张图片


上文来自:http://blog.csdn.net/kuloveyouwei/article/details/9062687


cocos2dX UI控件之CCProgress
  

今天我们来学习cocos2dX为我们提供的一个很实用的控件, CCProgress进度条, 我们先来看看有哪些常用的函数


用法:

CCProgressTimer::create( 精灵对象);

setType( 进度条样式); //设置进度条样式, 提供两种可选参数, kCCProgressTimerTypeBar( 条形计时器)和kCCProgressTimerTypeRadial( 扇形计时器)

setPercentage( float); //设置当前值, 在0-100之间, 一般情况下, 我们默认设置为0

getPercentage(); //获取当前值

setReverseProgress( bool); //是否打开反向

setBarChangeRate( CCPoint对象); //定义起始时的样式, 也有人说是设置锚点, 一般我习惯设置为ccp( 1, 0), 然后setMidpoint()设置为ccp( 0, 1), 这样刚好是普通的进度条样式

setMidpoint( CCPoint对象); //计时器显示方向, 默认的是0.5, 0.5, 从中间开始

老规矩, 资源准备好:

cocos2d-x 进度条_第4张图片

首先, 我们来创建一个进度条和一个标签:

<喎�"http://www.2cto.com/kf/ware/vc/" target="_blank" class="keylink">vcD4KPHByZSBjbGFzcz0="brush:java;">//创建字体标签 CCLabelTTF* ttf = CCLabelTTF::create( "loading...%0", "Arial", 24); ttf->setPosition( ccp( visibleSize.width / 2, visibleSize.height / 2 + 140)); addChild( ttf, 0, 101); //创建进度条背景, 可以不用 CCSprite* parBg = CCSprite::create( "bg.png"); parBg->setPosition( ccp( visibleSize.width / 2, visibleSize.height / 2)); addChild( parBg); //创建进度条 CCProgressTimer* myTimer = CCProgressTimer::create( CCSprite::create( "t.png")); myTimer->setPosition( ccp( visibleSize.width / 2, visibleSize.height / 2)); myTimer->setType(kCCProgressTimerTypeBar); //设置为条形进度条 myTimer->setBarChangeRate( ccp( 1, 0)); myTimer->setMidpoint( ccp( 0, 1)); myTimer->setPercentage(0); //设置当前值 addChild( myTimer, 0, 102); 
cocos2d-x 进度条_第5张图片


然后我们创建一个更新函数( 大家应该还记得吧), 用来断的操作进度条和标签, 然后再创建一个函数, 用来操作进度完成之后的行为:

?
1
2
virtual  void  update( float  delta);
     void  loadOK();
\


实现函数:

?
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
void  HelloWorld::update( float  delta)
{
     CCProgressTimer* myTimer = (CCProgressTimer*) this ->getChildByTag(  102 );
     float  cu = myTimer->getPercentage();      //获取到当前进度条的值
     if  ( cu >=  100 )
     {
         //如果进度条大于100, 调用载入完成函数, 停止更新函数
         loadOK();
         unscheduleUpdate();
     }
     else
     {
         //否则就给当前进度加0.1
         cu +=  0 .1f;
         myTimer->setPercentage( cu);
         CCString* str = CCString::createWithFormat(  "loading...%0.2f" , cu);
         CCLabelTTF* ttf = (CCLabelTTF*) this ->getChildByTag(  101 );
         ttf->setString( str->getCString());
     }
}
 
void  HelloWorld::loadOK()
{
     CCLabelTTF* ttf = (CCLabelTTF*) this ->getChildByTag(  101 );
     ttf->setString(  "load OK!!!!" );
}

cocos2d-x 进度条_第6张图片



现在, 一个装载界面就完成了, 我们来看看效果:

cocos2d-x 进度条_第7张图片

cocos2d-x 进度条_第8张图片


大家还记得红警这个游戏吗? 相信不少朋友是玩过的, 修建建筑物等待的时候也可以使用进度条来做, 我们来看看如何使用CCProgressTo:



CCProgressTo::create( 消耗时间, 显示图片百分比);


看看用法, 我们屏蔽掉刚刚的更新函数:

?
1
2
3
CCProgressTo* to = CCProgressTo::create(  2 .0f,  100 .0f);
     CCCallFunc* func = CCCallFunc::create(  this , callfunc_selector( HelloWorld::loadOK));
     myTimer->runAction( CCSequence::create( to, func, NULL));

cocos2d-x 进度条_第9张图片


这里我们创建了一个动作序列, 然后在动作执行完了之后去执行我们创建的一个函数任务, CCCallFunc创建一个相当于动作的函数, 我们会在后面讲到, 那个标签我就没有去操作它, 除了载入完成, 它是不会变的, 不要在意这些细节( 旁白: 没见过你这么懒的鄙视)

我们来看看效果:

cocos2d-x 进度条_第10张图片

没有操作标签哦, 亲们, 这不是bug哈

cocos2d-x 进度条_第11张图片


效果是不是出来了, 当然, 进度条这个控件, 我们还可以用来做血条, 设置为扇形的我们还可以用来做技能冷却效果之类的, 反正大家自己多摸索吧,,,


上文来自:http://blog.csdn.net/zhanghefu/article/details/38166785

你可能感兴趣的:(C++,开发,cocos2dx,cocos2d-x,手游)