[置顶] 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, 从中间开始

老规矩, 资源准备好:


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

//创建字体标签
	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);
	

[置顶] cocos2dX UI控件之CCProgress_第1张图片


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

virtual void update(float delta);
	void loadOK();


实现函数:

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!!!!");
}

[置顶] cocos2dX UI控件之CCProgress_第2张图片



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

[置顶] cocos2dX UI控件之CCProgress_第3张图片

[置顶] cocos2dX UI控件之CCProgress_第4张图片


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



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


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

CCProgressTo* to = CCProgressTo::create( 2.0f, 100.0f);
	CCCallFunc* func = CCCallFunc::create( this, callfunc_selector( HelloWorld::loadOK));
	myTimer->runAction( CCSequence::create( to, func, NULL));

[置顶] cocos2dX UI控件之CCProgress_第5张图片


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

我们来看看效果:

[置顶] cocos2dX UI控件之CCProgress_第6张图片

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

[置顶] cocos2dX UI控件之CCProgress_第7张图片


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




话说今天堵车, 现在才到家, 不得不吐槽一下成都的交通状况

你可能感兴趣的:(cocos2dx,进度条,CCProgressTimer,技能冷却,CCProgressTo)