2010-12-28 39 views
0

私はcocos2dを使用していると私は(私が円を描くようにしたい、それが動作します)cccnodeをサブクラス化している の.h[convertToGl]を呼び出す必要がありますか?

@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半径、角度、セグメント、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 

すべて私が480に私のccspritecircleの中心を配置する場合(つまり、画面端だ)ことを除いて正常に動作し、それが表示されますが、私は200pxのにそれを置く場合には、画面の終わりだdoesntのは。

私はこのような私のHelloWorldのシーンに位置コードを変更する場合: から:

circle_.position = CCP(480、0);その後、私はもうサークルを参照してくださいいけない

circle_.position = [[CCDirector sharedDirector] convertToGL: CGPointMake(480,0)]; 

:へ

。何か間違っているのですか?

答えて

0

唯一の目的は、他の形式のグラフィックス(イメージファイル)を使用せずにカスタムサークルを描くことであれば、CCSpriteではなくCCNodeをサブクラス化する必要があります。 CCSpriteは、グラフィックスファイルのロードと表示を処理する特別なタイプのCCNodeです。

オーバーライド内から "[super draw]"を呼び出して、追加処理が正しく行われるようにする必要があります。これは、コードの前後にある可能性があります。

ccDrawCircleはすでにx/y座標をGL空間に変換しているので、そのことについても心配する必要はありません。

あなたのCCNodeのアンカーポイントと位置はここでも重要な要素になります。デフォルトの0.5/0.5のanchorPointは、ノードのx/y位置に円の中心を設定する必要があります。そのため、半径が32の(480,0)は画面の右下に(縦に)64x64円を置き、あなたは円の左上象限しか見ることができません。

円をどのように初期化したかを見ることなく、200pxに設定すると画面の最後に配置されますが、なぜこれが発生するのかを特定するのは難しいですが、あなたの使い方を丸めてください。

アンカーポイントを変更すると、現在のアンカーポイントを考慮しない「描画」メソッドがあるため、アンカーポイントの設定に関係なく円をx/yに配置することができます。

関連する問題