我想在我的场景中绘制一个圆圈:
- (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);
}
好吧,我得到一些白色的小圆圈,没有填充,从中心到圆圈有一条线(就像一个时钟)。
那么,首先为什么颜色不符合要求,我怎么能用自己的颜色填充它?中间的线是什么?
而且,如果我想在一秒钟后改变颜色怎么办?最好的方法是什么?设置一个带全局变量的计时器?
答案 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方法的值。但请记住,您希望尽可能少的绘制方法中的非绘图代码,因此可能在另一个更新相关函数中计算颜色更改。