您的位置:首页 > 其它

CCProgressTimer(进度条)

2014-05-21 19:19 330 查看
#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
* @{
*/

/** Types of progress
@since v0.99.1
*/
typedef enum {
/// Radial Counter-Clockwise
kCCProgressTimerTypeRadial,
/// Bar
kCCProgressTimerTypeBar,
} CCProgressTimerType;

/**
@brief CCProgressTimer is a subclass of CCNode.
It renders the inner sprite according to the percentage.
The progress can be Radial, Horizontal or vertical.
@since v0.99.1
*/
class CC_DLL CCProgressTimer : public CCNodeRGBA
#ifdef EMSCRIPTEN
, public CCGLBufferedNode
#endif // EMSCRIPTEN
{
public:
CCProgressTimer();
~CCProgressTimer(void);

/** Change the percentage to change progress. */
inline CCProgressTimerType getType(void) { return m_eType; }

/** Percentages are from 0 to 100 */
inline float getPercentage(void) {return m_fPercentage; }

/** The image to show the progress percentage, retain */
inline CCSprite* getSprite(void) { return m_pSprite; }

/** Initializes a progress timer with the sprite as the shape the timer goes through */
bool initWithSprite(CCSprite* sp);

void setPercentage(float fPercentage);
void setSprite(CCSprite *pSprite);
void setType(CCProgressTimerType type);
void setReverseProgress(bool reverse);

virtual void draw(void);
void setAnchorPoint(CCPoint anchorPoint);

virtual void setOpacityModifyRGB(bool bValue);
virtual bool isOpacityModifyRGB(void);

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

public:
/** Creates a progress timer with the sprite as the shape the timer goes through */
static CCProgressTimer* create(CCSprite* sp);
protected:
ccTex2F textureCoordFromAlphaPoint(CCPoint alpha);
ccVertex2F vertexFromAlphaPoint(CCPoint alpha);
void updateProgress(void);
void updateBar(void);
void updateRadial(void);
void updateColor(void);
CCPoint boundaryTexCoord(char index);

protected:
CCProgressTimerType m_eType;
float m_fPercentage;
CCSprite *m_pSprite;
int m_nVertexDataCount;
ccV2F_C4B_T2F *m_pVertexData;

/**
* Midpoint is used to modify the progress start position.
* If you're using radials type then the midpoint changes the center point
* If you're using bar type the the midpoint changes the bar growth
* it expands from the center but clamps to the sprites edge so:
* you want a left to right then set the midpoint all the way to ccp(0,y)
* you want a right to left then set the midpoint all the way to ccp(1,y)
* you want a bottom to top then set the midpoint all the way to ccp(x,0)
* you want a top to bottom then set the midpoint all the way to ccp(x,1)
*/
CC_PROPERTY(CCPoint, m_tMidpoint, Midpoint);

/**
* This allows the bar type to move the component at a specific rate
* Set the component to 0 to make sure it stays at 100%.
* For example you want a left to right bar but not have the height stay 100%
* Set the rate to be ccp(0,1); and set the midpoint to = ccp(0,.5f);
*/
CC_SYNTHESIZE(CCPoint, m_tBarChangeRate, BarChangeRate);

bool m_bReverseDirection;
};

// end of misc_nodes group
/// @}

NS_CC_END

#endif //__MISC_NODE_CCPROGRESS_TIMER_H__
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: