Как нарисовать круглые полосы? - PullRequest
1 голос
/ 25 октября 2011

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

Я хочу создать круговую планку здоровья.Подумайте о Сердцах Королевства или о чем-то.

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

Ответы [ 2 ]

0 голосов
/ 19 апреля 2012

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

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

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

0 голосов
/ 29 октября 2011

Я быстро взглянул на код для ccDrawCircle.Если бы я приближался к этому, я бы, вероятно, начал с изменения способа работы цикла for (возможно, играя с coef или 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 );
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...