本文来自http://blog.csdn.net/runaying ,引用必须注明出处!

cocos2d-x节点(CCProgressTimer.h)API

温馨提醒:为了大家能更好学习,强烈推荐大家看看本人的这篇博客 Cocos2d-X权威指南笔记

进度条定时器

///cocos2d-x-3.0alpha0/cocos2dx/misc_nodes
//进度条定时器

#ifndef __MISC_NODE_CCPROGRESS_TIMER_H__
#define __MISC_NODE_CCPROGRESS_TIMER_H__

#include "sprite_nodes/CCSprite.h"
#ifdef EMSCRIPTEN
#include "base_nodes/CCGLBufferedNode.h"
#endif // EMSCRIPTEN

NS_CC_BEGIN

/**
 * @addtogroup misc_nodes
 * @{
 */

/**
 @brief ProgressTimer 是 Node 的子类.
 它根据百分比在内部渲染 sprite
 这个进度条可以 水平/垂直 Radial(径向,光线状的,放射的)
 @since v0.99.1
 */
class CC_DLL ProgressTimer : public NodeRGBA
#ifdef EMSCRIPTEN
, public GLBufferedNode
#endif // EMSCRIPTEN
{
public:
    /** Types of progress
     @since v0.99.1
     */
    enum class Type
    {
        /// Radial Counter-Clockwise(逆时针)
        RADIAL,
        /// Bar
        BAR,
    };
    
    /** 使用 sprite 创建一个进度条定时器,定时经过精灵的形状 */
    static ProgressTimer* create(Sprite* sp);
    /**
     * @js ctor
     */
    ProgressTimer();
    /**
     * @js NA
     * @lua NA
     */
    virtual ~ProgressTimer();

     /** 使用 sprite 初始化一个进度条定时器,定时经过精灵的形状 */
    bool initWithSprite(Sprite* sp);

    /** 改变百分比来改变进度. */
    inline Type getType() const { return _type; }

    /** Percentages(百分数) are from 0 to 100 */
    inline float getPercentage() const {return _percentage; }

    /** 使用图片来显示百分比进度, retain */
    inline Sprite* getSprite() const { return _sprite; }

    void setPercentage(float fPercentage);
    void setSprite(Sprite *pSprite);
    void setType(Type type);
    /**
     * @js setReverseDirection
     * @lua setReverseDirection
     */
    void setReverseProgress(bool reverse);

    inline bool isReverseDirection() { return _reverseDirection; };
    inline void setReverseDirection(bool value) { _reverseDirection = value; };

    /**
     *    Midpoint 是用来修改进度条的起始位置.
     *   如果你实用哦了 radials 类型, midpoint 可以改变中心点
     *    如果你使用的是 bar 类型,midpoint 可以改变 bar 的增长
     *       它从 center 扩展而来,但是也拥有 Sprite 的边缘。所以:
     *        你希望从左到右,所有的类型都可以设置 midpoint 为 Point(0,y)
     *        你希望从右到左,所有的类型都可以设置 midpoint 为 Point(1,y)
     *        你希望从底部到上部,所有的类型都可以设置 midpoint 为 Point(x,0)
     *         你希望从上部到底部,所有的类型都可以设置 midpoint 为 Point(x,1)
     */
    void setMidpoint(const Point& point);
    /** Returns the Midpoint */
    Point getMidpoint() const;

    /**
     *    允许 bar 类型使用特定的速率来移动
     *    将 component(设备)设置为 0 ,以确保它保持在 100%.
     *   例如,你想有一个从左到右的 bar 但是没有把高度保持在 100%
     *    把速率设置为点 Point(0,1); 设置 midpoint(中点)为 = Point(0,.5f);
     */
    inline void setBarChangeRate(const Point& barChangeRate ) { _barChangeRate = barChangeRate; }
    /** Returns the BarChangeRate (Bar 改变率)*/
    inline Point getBarChangeRate() const { return _barChangeRate; }

    // Overrides
    virtual void draw(void) override;
    void setAnchorPoint(const Point& anchorPoint) override;
    virtual void setColor(const Color3B& color) override;
    virtual const Color3B& getColor() const override;
    virtual GLubyte getOpacity() const override;
    virtual void setOpacity(GLubyte opacity) override;
    
protected:
    Tex2F textureCoordFromAlphaPoint(Point alpha);
    Vertex2F vertexFromAlphaPoint(Point alpha);
    void updateProgress(void);
    void updateBar(void);
    void updateRadial(void);
    void updateColor(void);
    Point boundaryTexCoord(char index);

    Type _type;
    Point _midpoint;
    Point _barChangeRate;
    float _percentage;
    Sprite *_sprite;
    int _vertexDataCount;
    V2F_C4B_T2F *_vertexData;

    bool _reverseDirection;
};

// end of misc_nodes group
/// @}

NS_CC_END

#endif //__MISC_NODE_CCPROGRESS_TIMER_H__


Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐