#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 сделать всю работу за вас.