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

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

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

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

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

    [cpp] view plaincopy
     
    1. typedef enum {  
    2.     /// Radial Counter-Clockwise  
    3.     kCCProgressTimerTypeRadial,  
    4.     /// Bar  
    5.     kCCProgressTimerTypeBar,  
    6. } CCProgressTimerType;  


    (2)类型1:radial(环形)

    [cpp] view plaincopy
     
    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);  


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

    渐变的方向问题:

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

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

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

    首先是setMidpoint设置起点

    [cpp] view plaincopy
     
    1. /** 
    2.      *    Midpoint is used to modify the progress start position. 
    3.      *    If you're using radials type then the midpoint changes the center point 
    4.      *    If you're using bar type the the midpoint changes the bar growth 
    5.      *        it expands from the center but clamps to the sprites edge so: 
    6.      *        you want a left to right then set the midpoint all the way to ccp(0,y) 
    7.      *        you want a right to left then set the midpoint all the way to ccp(1,y) 
    8.      *        you want a bottom to top then set the midpoint all the way to ccp(x,0) 
    9.      *        you want a top to bottom then set the midpoint all the way to ccp(x,1) 
    10.      */  


    其次是setBarChangeRate设置变化rate

    [cpp] view plaincopy
     
    1. /** 
    2.      *    This allows the bar type to move the component at a specific rate 
    3.      *    Set the component to 0 to make sure it stays at 100%. 
    4.      *    For example you want a left to right bar but not have the height stay 100% 
    5.      *    Set the rate to be ccp(0,1); and set the midpoint to = ccp(0,.5f); 
    6.      */  


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

    [cpp] view plaincopy
     
    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);  


    (4) 执行变化

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

    创建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)

    [cpp] view plaincopy
     
    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的变化。

    [cpp] view plaincopy
     
    1. this->scheduleUpdate();  
    [cpp] view plaincopy
     
    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. }  

    关于CCProgressTimer的更加详细的使用 demo可以参看引擎中sample中的ActionProgressTest。

  • 相关阅读:
    POJ 1953 World Cup Noise
    POJ 1995 Raising Modulo Numbers (快速幂取余)
    poj 1256 Anagram
    POJ 1218 THE DRUNK JAILER
    POJ 1316 Self Numbers
    POJ 1663 Number Steps
    POJ 1664 放苹果
    如何查看DIV被设置什么CSS样式
    独行DIV自适应宽度布局CSS实例与扩大应用范围
    python 从入门到精通教程一:[1]Hello,world!
  • 原文地址:https://www.cnblogs.com/GameDeveloper/p/3578584.html
Copyright © 2011-2022 走看看