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 ;) 免责申明:本博客提供的所有翻译文章原稿均来自互联网,仅供学习交流 ...
随机推荐
- Beta冲刺提交-星期三
- 这个作业属于哪个课程 <https://edu.cnblogs.com/campus/xnsy/SoftwareEngineeringClass1> 这个作业要求在哪里 <htt ...
- 自动交互脚本之expect使用记录
之前一直没怎么用这个命令,意外用了一下,还不错,那这个是干嘛的呢 我们或多或少会远程登录其他服务器,需要执行某项任务,通常需要手动接入,输入密码啊,等等 那我们如何有效的自动执行呢,expect可以解 ...
- jQuery中Ajax事件beforesend及各参数含义1
jQuery中Ajax事件beforesend及各参数含义 转自:http://blog.sina.com.cn/s/blog_609f9fdd0100wprz.html Ajax会触发很多事件. 有 ...
- ssh架包下载地址
1.连接MySQL数据库所需架包点击进入官网下载 2.连接Oracle数据库所需架包点击进入官网下载 3.JUnit测试所需架包点击进入官网下载或者点击进入官网下载 4.Struts所需架包点击进入官 ...
- 「 HDU 1978 」 How many ways
# 解题思路 记忆化搜索 一个点可以跳到的点,取决于它现在的能量.而且有一个显而易见的性质就是一条可行路径的终点和起点的横坐标之差加上纵坐标之差肯定小于等于起点的能量. 因为跳到一个点之后,能量和之前 ...
- BZOJ 1565 植物大战僵尸 最大权闭合子图+网络流
题意: 植物大战僵尸,一个n*m的格子,每 个格子里有一个植物,每个植物有两个属性: (1)价值: (2)保护集合,也就是这个植物可以保护矩阵中的某些格子. 现在你是僵尸,你每次只能从(i,m) 格子 ...
- 记一次被面试的final问题
---- 前言 今天面试被问到了,我们都知道final修饰的东西是不可变的,那么是值不可变还是其地址不可变?一脸懵逼,回来查阅一番,总结一下 --- final与数据 在日常行为下,一般数据指的都是基 ...
- [Python3网络爬虫开发实战] 6.2-Ajax分析方法
这里还以前面的微博为例,我们知道拖动刷新的内容由Ajax加载,而且页面的URL没有变化,那么应该到哪里去查看这些Ajax请求呢? 1. 查看请求 这里还需要借助浏览器的开发者工具,下面以Chrome浏 ...
- 15Spring AOP基础
为什么需要AOP? 先来看一段代码: package com.cn.spring.aop.helloworld; //加减乘除的接口类 public interface ArithmeticCalcu ...
- C51 蜂鸣器 个人笔记
音调:频率 音量:高低电平占空比 有源:上面没有加号,只需高低电平即可发声 无源:上面有加号,不仅要电平,还要, 的频率 这里的有源不是指电源的"源",而是指有没有自带震荡电路,有 ...