如何画圆棒?

时间:2011-10-25 01:37:21

标签: objective-c cocos2d-iphone

我正在开发一款带有cocos2d-iphone的游戏。

我想要一个圆形的健康吧。想想王国之心或其他什么。

我可以使用ccDrawLine绘制圆圈,但它们是完整的圈子。基本上,我需要能够绘制一定的圆周值来正确表示健康状况。但是,我对此并不十分确定。有什么想法吗?

2 个答案:

答案 0 :(得分:0)

我快速浏览了ccDrawCircle的代码。如果我接近这个,我可能首先修改for循环的工作方式(可能通过玩coefsegs),以便提前停止。

void ccDrawCircle( CGPoint center, float r, float a, NSUInteger segs, BOOL drawLineToCenter)
{
    int additionalSegment = 1;
    if (drawLineToCenter)
        additionalSegment++;

    const float coef = 2.0f * (float)M_PI/segs;

    GLfloat *vertices = calloc( sizeof(GLfloat)*2*(segs+2), 1);
    if( ! vertices )
        return;

    for(NSUInteger i=0;i<=segs;i++)
    {
        float rads = i*coef;
        GLfloat j = r * cosf(rads + a) + center.x;
        GLfloat k = r * sinf(rads + a) + center.y;

        vertices[i*2] = j * CC_CONTENT_SCALE_FACTOR();
        vertices[i*2+1] =k * CC_CONTENT_SCALE_FACTOR();
    }
    vertices[(segs+1)*2] = center.x * CC_CONTENT_SCALE_FACTOR();
    vertices[(segs+1)*2+1] = center.y * CC_CONTENT_SCALE_FACTOR();

    // Default GL states: GL_TEXTURE_2D, GL_VERTEX_ARRAY, GL_COLOR_ARRAY, GL_TEXTURE_COORD_ARRAY
    // Needed states: GL_VERTEX_ARRAY, 
    // Unneeded states: GL_TEXTURE_2D, GL_TEXTURE_COORD_ARRAY, GL_COLOR_ARRAY   
    glDisable(GL_TEXTURE_2D);
    glDisableClientState(GL_TEXTURE_COORD_ARRAY);
    glDisableClientState(GL_COLOR_ARRAY);

    glVertexPointer(2, GL_FLOAT, 0, vertices);  
    glDrawArrays(GL_LINE_STRIP, 0, (GLsizei) segs+additionalSegment);

    // restore default state
    glEnableClientState(GL_COLOR_ARRAY);
    glEnableClientState(GL_TEXTURE_COORD_ARRAY);
    glEnable(GL_TEXTURE_2D);    

    free( vertices );
}

答案 1 :(得分:0)

CGContextAddArc()可以解决问题。一个例子解释了一切。

             CGContextAddArc(CGFloat centerX, CGFloat centerY, CGFloat radius, CGFloat startAngle, CGFloat endAngle, int clockwise);

我不太确定参数的顺序,你最好google它或让XCode为你工作。

相关问题