Cocos2d-X中的ProgressTimer
ProgressTimer即进度条,进度条在游戏开发中运用很广泛,比如在一些格斗游戏中,显示血液的变化,还有游戏载入进度,等都离不开进度条
Cocos2d-X中使用CCProgressTimer创建进度条
先从一个简单的样例使用ProgressTimer屏蔽部分精灵
首先在project文件夹下的Resource文件夹中放一张图片
然后创建一个ProgressTimer类
在ProgressTimer.h中加入以下的代码
#ifndef __ProgressTimer_H__
#define __ProgressTimer_H__ #include "cocos2d.h"
USING_NS_CC; class ProgressTimer : public CCLayer
{
public:
virtual bool init(); static CCScene* scene(); CREATE_FUNC(ProgressTimer); void scheduleFunc(float dt);
}; #endif // __ProgressTimer_H__
在ProgressTimer.cpp中加入以下的代码
#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:显示前半部分
#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实现旋转效果的进度条
程序代码:
#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
程序代码:
#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();
}
}
运行结果:
ProgressTimer实现进度条3
首先在project文件夹下的Resource文件夹中加入两张进度条图片
程序代码:
#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
程序代码
#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
程序代码
#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
程序代码
#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;
}
运行结果:
Cocos2d-X中的ProgressTimer的更多相关文章
- 如何在cocos2d项目中enable ARC
如何在cocos2d项目中enable ARC 基本思想就是不支持ARC的代码用和支持ARC的分开,通过xcode中设置编译选项,让支持和不支持ARC的代码共存. cocos2d是ios app开发中 ...
- 如何在Cocos2D游戏中实现A*寻路算法(六)
大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 免责申明:本博客提供的所有翻译文章原稿均来自互联网,仅供学习交流 ...
- 如何在Cocos2D游戏中实现A*寻路算法(一)
大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 免责申明:本博客提供的所有翻译文章原稿均来自互联网,仅供学习交流 ...
- 如何在Cocos2D游戏中实现A*寻路算法(八)
大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 免责申明:本博客提供的所有翻译文章原稿均来自互联网,仅供学习交流 ...
- 如何在Cocos2D游戏中实现A*寻路算法(七)
大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 免责申明:本博客提供的所有翻译文章原稿均来自互联网,仅供学习交流 ...
- 如何在Cocos2D游戏中实现A*寻路算法(五)
大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 免责申明:本博客提供的所有翻译文章原稿均来自互联网,仅供学习交流 ...
- 如何在Cocos2D游戏中实现A*寻路算法(四)
大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 免责申明:本博客提供的所有翻译文章原稿均来自互联网,仅供学习交流 ...
- 如何在Cocos2D游戏中实现A*寻路算法(三)
大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 免责申明:本博客提供的所有翻译文章原稿均来自互联网,仅供学习交流 ...
- 如何在Cocos2D游戏中实现A*寻路算法(二)
大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 免责申明:本博客提供的所有翻译文章原稿均来自互联网,仅供学习交流 ...
随机推荐
- 使用Caliburn.Micro系列1:新建项目并引入CM
一.WPF的几个MVVM模式实现 MVVMLight:小众的平民框架,实现简单粗暴. pass:最近更新在15年 官网: http://www.mvvmlight.net/ 最近一篇内容全面的好文: ...
- css 最高权重 !important;
border-top: 1px solid #ccc !important;
- 16.04 下 ufw 防火墙的的开启、禁用、开放端口、关闭端口
16.04 下的 ufw 防火墙相关操作使用ufw命令.通过ufw --help可以查看所有相关命令. 打开防火墙 sudo ufw enable 重启防火墙 sudo ufw reload 打开指定 ...
- No-6.If语句
判断(if)语句 01. 开发中的应用场景 生活中的判断几乎是无所不在的,我们每天都在做各种各样的选择,如果这样?如果那样?…… 程序中的判断 if 今天发工资: 先还信用卡的钱 if 有剩余: 又可 ...
- 数据库中的Schema是什么?
在数据库中,schema(发音 “skee-muh” 或者“skee-mah”,中文叫模式)是数据库的组织和结构,schemas andschemata都可以作为复数形式.模式中包含了schema对象 ...
- IOS 3D UI --- CALayer的transform扩展
http://www.cocoachina.com/bbs/read.php?tid=117061 例子代码可以在 http://download.csdn.net/detail/worldmatri ...
- $.fn.extend的用法
$.fn.extend({ sfMessages: function(m) { $("p.tips").html('<span class="circle ioc ...
- C++11新特性之final override标识符
final: final修饰符可用于修饰类,放在类名后面,被final修饰符修饰的类不能被继承.示例代码: // 正确的示范 #include <iostream> class A { p ...
- mxnet.base.MXNetError: src/imperative/./imperative_utils.h:70: Check failed: inputs[i]->ctx().dev_mask() == ctx.dev_mask() (1 vs. 2)
mxnet 训练错误: mxnet.base.MXNetError: [14:42:22] src/imperative/./imperative_utils.h:70: Check failed: ...
- Linux环境下c程序的编译和执行
1 单个文件的编译和执行创建main.c文件,内容如下: #include <stdio.h> #include <stdlib.h> int main(void){ prin ...