1

我正在尝试在我的场景中画一个圆圈:

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

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

那么,首先为什么颜色不符合要求,我该如何用自己的颜色填充呢?中间的线是什么?

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

4

2 回答 2

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

这应该可以解决您的问题。希望能帮助到你。

于 2013-09-24T03:34:47.510 回答
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 方法的值。但请记住,您希望 draw 方法中的非绘图代码尽可能少,因此也许可以在另一个与更新相关的函数中计算颜色变化。

于 2013-09-18T16:16:17.607 回答