项目里面有一个简单的特效,需要绘制一个圆形,这个圆形具有层和缩放的属性,本来打算直接用ccDrawCircle来绘制,然而直接用这个函数不便于圆形的缩放,
并且没有层的属性。
于是想到将这个ccDrawCircle放到精灵中去绘制,那样啥属性都有了!
然而这个重写CCSprite init和draw函数的过程并不是那么顺利,这里不细说,看代码。
class PrimarySprite : public CCSprite
{
protected:
ccColor4F color;
public:
virtual void draw();
};
class CircleSprite : public PrimarySprite
{
private:
CCPoint center; //圆形的中心点
float radius; //半径
float width; //线条宽度
bool fill; //是否填充,暂未实现
public:
//创建函数
static CircleSprite* create(CCPoint cen, int rad, float width, ccColor4F color){
CircleSprite *pSprite = new CircleSprite();
if (pSprite && pSprite->init())//pSprite->initWithTexture(NULL, CCRectMake(cen.x, cen.x, rad*2, rad*2)))
{
//
pSprite->width = width;
pSprite->center = cen;
pSprite->radius = rad;
pSprite->color = color;
pSprite->setPosition(cen); //注意这里需要设置精灵的位置
//
pSprite->autorelease();
return pSprite;
}
CC_SAFE_DELETE(pSprite);
return NULL;
}
public:
void draw(){
glLineWidth(width);
ccDrawColor4F(color.r, color.g, color.b, color.a);
//根据圆的半径来计算分割份数,一般够用
ccDrawCircle(CCPointZero, radius, 0,radius*2.0 , false); //注意这里用坐标(0,0)!
}
};