1

ボタンを模倣するクラスがあります。中央に(水平に)揃えようとしているラベルが1つ含まれています。どう頑張ってもラベルは左側に留まり、見た目よりも複雑だと思います。初期化/セットアップコードは次のとおりです。

-(CCButtonLayer*)initWithText:(NSString*)text bgColor:(ccColor4B)color width:(GLfloat)width height:(GLfloat)height {
    self = [super initWithColor:color width:width height:height];
    self.lbl = [CCLabelTTF labelWithString:text fontName:@"Marker Felt" fontSize:22];
    self.lbl.horizontalAlignment = kCCTextAlignmentCenter;
    [self.lbl setHorizontalAlignment:kCCTextAlignmentCenter];
    self.lbl.color = ccc3(0,0,0);
 //   self.lbl.contentSize = CGSizeMake(width, height); // no effect anyway
    self.lbl.anchorPoint = CGPointZero;
    self.lbl.position = CGPointZero;
    [self addChild:self.lbl];
    return self;
}
4

3 に答える 3

3

ラベルの配置プロパティを削除し、代わりに手動で配置しました。明らかに、私には見えない何かが起こっています。@LearnCocos2D が言ったように、別のオフセットがある可能性があります。

// this worked
CGSize textSize = [self.lbl.string sizeWithFont:[UIFont fontWithName:fontName size:fontSize]];
self.lbl.anchorPoint = CGPointZero;
self.lbl.position = ccp(textSize.width /2.0f, textSize.height/2.0);
于 2012-08-19T14:39:25.650 に答える
1

ジェームズが言ったように、アンカーポイントを変更すると配置に影響します。そのため、CGPointZero を割り当てないでください。これにより、左下隅が親の位置に揃えられます。

それでも変化が見られないという事実は、ラベルの位置が実際には親の位置へのオフセットであると考えていないことを示している可能性があります。親の anchorPoint も変更した場合、ラベルの位置は親の左下隅からのオフセットになります。

簡単に言えば、アンカーポイントを変更しないでください。ラベルを除いて、アンカーポイントを使用して配置に影響を与えることができます。

于 2012-08-18T18:49:46.837 に答える
1
self.lbl.anchorPoint = CGPointZero;
self.lbl.position = CGPointZero;

ラベルの位置を決定しているのは、この 2 行です。

それらを次のように設定してみてください。

self.lbl.anchorPoint = ccp(0.5, 0.5);  //This is default, you could omit
self.lbl.position = ccp(self.contentSize.width / 2.0f, self.contentSize.height / 2.0f);

「self」がボタンであり、この時点でコンテンツのサイズが設定されていると想定しています

于 2012-08-18T17:43:16.890 に答える