zoukankan      html  css  js  c++  java
  • Cocos2d-x 中 CCProgressTimer

    CCProgressTimer,创建使用这个节点可以大致实现两个作用的效果:

    其一:在游戏中几乎大部分的游戏启动界面都是游戏加载画面,那么用到的一般是进度条提示加载进度,其使用的就是CCProgressTimer。

    其二:在游戏中需要对精灵的出现等动作制作一些渐显的效果。

    (1)类型一般就是两种:

    1 typedef enum {
    2     /// Radial Counter-Clockwise
    3     kCCProgressTimerTypeRadial,
    4     /// Bar
    5     kCCProgressTimerTypeBar,
    6 } CCProgressTimerType;

    ①类型1:radial(环形)

    1 CCSize wSize = CCDirector::sharedDirector()->getWinSize();
    2     progressTimer = CCProgressTimer::create(CCSprite::create("progress.gif"));
    3     progressTimer->setType(kCCProgressTimerTypeRadial);
    4     // 默认的情况下,环形渐变的方向是:顺时针
    5     // 改变其渐变的方向 Makes the ridial CCW (逆时针)
    6     progressTimer->setReverseProgress(true);
    7     progressTimer->setPosition(wSize.width/2,wSize.height/2);
    8     this->addChild(progressTimer);

    ②类型2:bar  (条形:包括vertical 和 horizontal)

    渐变的方向问题:

    vertical竖直方法包括从上到下和从下到上;

    horizontal水平方向包括从左到右和从右到左。

    这里涉及到两个设置参数:

    首先是setMidpoint设置起点

    其次是setBarChangeRate设置变化rate

    如果不用变化的方向,则设置该方向为0,否则设置为1。

     1 CCSize wSize = CCDirector::sharedDirector()->getWinSize();
     2     progressTimer = CCProgressTimer::create(CCSprite::create("progress.gif"));
     3     progressTimer->setType(kCCProgressTimerTypeBar);
     4     
     5     //从左到右
     6     progressTimer->setMidpoint(ccp(0, 0.5));
     7     progressTimer->setBarChangeRate(ccp(1, 0));
     8     
     9     //从右到左
    10 //    progressTimer->setMidpoint(ccp(1, 0.5));
    11 //    progressTimer->setBarChangeRate(ccp(1, 0));
    12     
    13     //从上到下
    14 //    progressTimer->setMidpoint(ccp(0.5, 1));
    15 //    progressTimer->setBarChangeRate(ccp(0, 1));
    16     
    17     //从下到上
    18 //    progressTimer->setMidpoint(ccp(0.5, 0));
    19 //    progressTimer->setBarChangeRate(ccp(0, 1));
    20     
    21     progressTimer->setPosition(wSize.width/2,wSize.height/2);
    22     this->addChild(progressTimer);

    (2) 执行变化

    ①、如果是要实现精灵渐变的显示效果:

    创建CCProgressTo或者是CCProgressFromTo动作,让CCProgressTimer执行。
    CCProgressTo和CCProgressFromTo的区别是:

    前者:Progress to percentage(初始化有两个参数)(float duration, float fPercent)

    后者:Progress from a percentage to another percentage(初始化有三个参数)(float duration, float fFromPercentage, float fToPercentage)

    1 CCProgressTo *progressTo = CCProgressTo::create(2.0, 100);
    2     //等价于:
    3     //CCProgressFromTo *progressFromTo = CCProgressFromTo::create(2.0, 0, 100);
    4     progressTimer->runAction(CCRepeatForever::create(progressTo));

    ②、如果是要实现加载进度条的效果:

    需要重载update方法,在这个方法中实现进度条percentage的变化。

    1 this->scheduleUpdate();
    1 void HelloWorld::update(float dt)
    2 {
    3     float percentage = progressTimer->getPercentage();
    4     
    5     if (percentage < 100) {
    6         percentage += 1;
    7         progressTimer->setPercentage(percentage);
    8     }
    9 }
  • 相关阅读:
    [转]狼的故事8:生存就是坚持
    [转]狼的故事7:单枪匹马的代价
    如何在GridView的Footer内显示总计?
    javascript中如何正确将日期(Date)字符串转换为日期(Date)对象?
    无限级分类(非递归算法/存储过程版/GUID主键)完整数据库示例_(1)表结构
    [转]狼的故事12:王者的风范
    [转]狼的故事2:光线背后的嚎叫
    vs.net2008正式版发布并提供下载(英文版)
    [转]狼的故事11:以牙还牙
    [转]狼的故事3:百分之百的死亡
  • 原文地址:https://www.cnblogs.com/atong/p/3309785.html
Copyright © 2011-2022 走看看