在游戏开发中,我们通常需要做一个游戏的进度条来过渡游戏的场景切换或者显示游戏资源的加载进度。
同样的来说,进度条可以在角色扮演游戏中作为玩家或者怪物头顶的生命条,或者消除类休闲游戏的倒计时等。进度条多种多样,如何合理的使用根据游戏的项目需求而定。
在cocos2dx中,进度条使用 ProgressTimer 来实现,首先要定义精灵绑定进度条。
打开我们创建的项目cocosxuexi,直接改写init()初始化里的代码来实现,先把以前写的代码注释掉。
1、首先在HelloWorldScene.h文件里定义2个指针。
public:
virtualvoid update(float dt);//默认调度器
private:
ProgressTimer* progress1;//定义进度条指针
LabelTTF* numsTTF;//定义标签指针
2、在HelloWorldScene.cpp里init()方法里创建一个进度条和一个进度条的边框
Size visibleSize = Director::getInstance()->getVisibleSize();
Vec2 origin = Director::getInstance()->getVisibleOrigin();
//创建一个进度条精灵边框
auto progressbgSprite=Sprite::create("loadKuang.png");
progressbgSprite->setPosition(Vec2(origin.x + visibleSize.width/2,origin.y + visibleSize.height/2));
this->addChild(progressbgSprite,1);
//创建一个进度条精灵
auto progressSprite=Sprite::create("loadBar.png" progress1=ProgressTimer::create(progressSprite);
progress1->setType(kCCProgressTimerTypeBar);
progress1->setPosition(Vec2//进度动画运动方向,可以多试几个值,看看效果
progress1->setMidpoint(Vec2(0,0));
//进度条宽高变化
progress1->setBarChangeRate(Vec2(1,0));
progress1->setPercentage(0); //设置进度条百分比为0%
this->addChild(progress1,1);
numsTTF=CCLabelTTF::create("0","Thonburi" numsTTF->setPosition(origin.x + visibleSize.width/2,origin.y + visibleSize.height/2);
this->addChild(numsTTF,1);
scheduleUpdate(); //默认调度器,调用update()方法
3、在HelloWordScene.cpp里实现update()方法
voidHelloWorld::update(floatdt)
{
float cu=progress1->getPercentage(); //获取百分比
cu=cu+1.0f; //进度条进度 每次加1%
progress1->setPercentage(cu);
if (cu <= 100) //如果进度小于等于100%
{
auto str1 = String::createWithFormat("%.2f%%"numsTTF->setString(str1->getCString()); //设置标签显示内容
}
//如果进度条达到100%,则停止
else
{
unscheduleUpdate();//停止默认调度器
}
}
到此一个可用的进度条就已经实现了。如果用来实现场景自动切换,直接在update()里停止调度器后就实现自动切换操作。
效果预览:
Cocos2dx学习笔记12:cocos2dx进度条(ProgressTimer)