Как рисовать круглые столбики?

#objective-c #cocos2d-iphone

#objective-c #cocos2d-iphone

Вопрос:

Я разрабатываю игру с cocos2d-iphone.

Я хочу создать круглую полосу работоспособности. Подумайте о Kingdom Hearts или что-то в этом роде.

Я могу рисовать круги ccDrawLine , но это полные круги. В принципе, мне нужно иметь возможность рисовать до определенного значения окружности, чтобы правильно представлять работоспособность. Однако я не совсем уверен в этом. Есть идеи?

Ответ №1:

Я быстро просмотрел код для ccDrawCircle. Если бы я приближался к этому, я бы, вероятно, начал с изменения способа работы for цикла (возможно, играя с coef or segs ), чтобы он останавливался раньше.

 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 );
}
 

Ответ №2:

CGContextAddArc() сделает свое дело. Пример все объясняет.

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

Я не совсем уверен в порядке параметров, вам лучше погуглить или позволить XCode сделать всю работу за вас.