我正在使用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)];
那时我再也看不到圆圈了。我做错了吗?
答案 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处。