我需要调用[convertToGl]吗?

时间:2010-12-28 20:37:25

标签: cocos2d-iphone position

我正在使用cocos2d并且我已经将cccnode子类化了(我想绘制圆圈并且有效) .H

@interface CCSpriteCircle : CCSprite {
 float radius;
 float angle; //in radians
 NSUInteger segments;
 BOOL drawLineToCenter;
 ccColor4B cColor;
}
-(id) initWithRadius: (float)radius_ withAngle: (float)angle_ withSegments: (NSUInteger)segments_ withDrawLineToCenter:(BOOL)drawLineToCenter_;

@property(nonatomic,assign) float radius;
@property(nonatomic,assign) float angle;
@property(nonatomic,assign) NSUInteger segments;
@property(nonatomic,assign) BOOL drawLineToCenter;
@property(nonatomic,assign) ccColor4B cColor;

@end

//我的.m文件

@implementation CCSpriteCircle @synthesize radius,angle,segments,drawLineToCenter,cColor;

-(id) initWithRadius: (float)radius_ withAngle: (float)angle_ withSegments: (NSUInteger)segments_ withDrawLineToCenter:(BOOL)drawLineToCenter_
{
 if( (self=[super init])) {
  self.radius = radius_;
  self.angle = angle_;
  self.segments = segments_;
  self.drawLineToCenter = drawLineToCenter_;
  //[self draw];
 }

 return self;
}

-(void)draw {

 glLineWidth(1);
 glColor4ub(cColor.r, cColor.g, cColor.b, cColor.a);
 ccDrawCircle(ccp(self.position.x,self.position.y), radius, angle, segments, drawLineToCenter);
 // restore original values
 glLineWidth(1);
 glColor4ub(255,255,255,255);
 glPointSize(1);

}
@end

一切正常,但如果我将ccspritecircle的中心放到480(即屏幕的末尾),它就不会出现,但是如果我把它放到200px它就在屏幕的末尾。

如果我改变我的helloworld场景中的位置代码,如下所示: 从:

circle_.position = ccp(480,0);

为:

circle_.position = [[CCDirector sharedDirector] convertToGL: CGPointMake(480,0)];
那时我再也看不到圆圈了。我做错了吗?

1 个答案:

答案 0 :(得分:0)

如果您的唯一目的是绘制自定义圆圈,而不使用任何其他形式的图形(图像文件),那么您应该继承CCNode,而不是CCSprite。 CCSprite是一种特殊类型的CCNode,用于处理图形文件的加载和显示。

您还应该从覆盖内部调用“[super draw]”,以确保正确完成其他处理 - 这可以在代码之前或之后,具体取决于它对最终结果的影响。

ccDrawCircle已经将x / y坐标转换为GL空间,因此您也不必担心这一点。

你的CCNode的anchorPoint和位置可能是一个因素。默认的0.5 / 0.5 anchorPoint应该将圆的中心设置在节点的x / y位置,因此(480,0)半径为32将在屏幕的右下角放置一个64x64的圆圈(纵向)和你只能看到圆圈的左上象限。

你说将它设置为200px将其置于屏幕的末尾,而没有看到圆圈是如何初始化的,很难确定为什么会发生这种情况 - 但它很可能与圆的半径有关你的使用。

请记住,更改anchorPoint可能不会影响圆的渲染,因为您的“绘制”方法没有考虑当前的anchorPoint,因此无论anchorPoint设置如何,它都可能将圆圈放在x / y处。