用cocos2d画一个圆圈?

时间:2013-09-18 15:42:04

标签: iphone objective-c

我想在我的场景中绘制一个圆圈:

- (void) draw
{
     ccDrawColor4F(100, 100, 100, 255);
    CGPoint center = ccp(winSize.width/2, winSize.height/2);
    CGFloat radius = 10.f;
    CGFloat angle = 0.f;
    NSInteger segments = 10;
    BOOL drawLineToCenter = YES;

    ccDrawCircle(center, radius, angle, segments, drawLineToCenter);
}

好吧,我得到一些白色的小圆圈,没有填充,从中心到圆圈有一条线(就像一个时钟)。

那么,首先为什么颜色不符合要求,我怎么能用自己的颜色填充它?中间的线是什么?

而且,如果我想在一秒钟后改变颜色怎么办?最好的方法是什么?设置一个带全局变量的计时器?

2 个答案:

答案 0 :(得分:2)

#import <OpenGLES/ES1/gl.h>

- (void) draw
{
    glLineWidth(5*CC_CONTENT_SCALE_FACTOR()); //set the thickness to 5 pixels for example
    ccDrawColor4F(0.4,0.4,0.4, 1);
    ccDrawLine([self anchorPoint], _peg.position);
    CGPoint center = ccp(winSize.width/2, winSize.height/2);
    CGFloat radius = 10.0;
    CGFloat angle = 360;
    NSInteger segments = 360;
    BOOL drawLineToCenter = NO;

    ccDrawCircle(center, radius, angle, segments, drawLineToCenter);
}

如果您想每秒更新圆圈的颜色,请安排更新方法并按如下方式实施:

-(void) update:(float)dt
{
    if(startTime == 0){
        startTime = [NSDate timeIntervalSinceReferenceDate];
    }
    double elapsedTime = [NSDate timeIntervalSinceReferenceDate] - startTime;
    if(elapsedTime > 1){
        //update ccDrawColor4F here, for example just changing the Red component:
        ccDrawColor4F((float)arc4random() / UINT_MAX,0.4,0.4, 1);
        startTime = [NSDate timeIntervalSinceReferenceDate];
    }
}

这应该可以解决您的问题。希望它有所帮助。

答案 1 :(得分:0)

颜色值是浮点数而不是字节,因此您需要传递更像

的内容

ccDrawColor4F(0.4f,0.4f,0.4f,1.f);

为了保持一致性,您可能还需要在调用绘制方法后将颜色重置为白色。

要获得一个实心圆圈,请使用此功能

void ccDrawSolidCircle( CGPoint center, float r, float a, NSUInteger segs, ccColor4F color);

圆圈始终从中间绘制,因此如果您选择4个线段,您将从中间绘制4条线。虽然我对此不太确定,但我根本不会使用原语。至于颜色变化,是的,我会选择某种形式的计时器来更改传递给ccDrawColor4F方法的值。但请记住,您希望尽可能少的绘制方法中的非绘图代码,因此可能在另一个更新相关函数中计算颜色更改。