1

基本的に、スプライト内にテキストを追加して中央に配置したい(テキストのサイズに関係なく、実際に中央に配置するのと同じように中央に配置する)

私が欲しいもの

問題

これはdebugdrawで

4

3 に答える 3

4

設定できます

myLab.position = ccp(mySprite.contentSize.width/2, mySprite.contentSize.hieght/2);
[mySprite addChild: myLab];

これを使って楽しんでください...

于 2012-09-11T12:16:19.563 に答える
1

デフォルトでは、位置をラベルの中央に設定します。もちろん、変更していなければアンカーポイントです。だから、このコード

[label setPosition: ccpMult(ccpFromSize(sprite.contentSize), 0.5f) ];
[sprite addChild: label];

ラベルを中央に配置します

于 2012-08-31T13:46:18.800 に答える
1

スプライトとラベルの両方が同じ親を持つと仮定します。

label.position = sprite.position;

ラベルがスプライトの子であると仮定します:

label.position = ccp(sprite.contentSize.width * sprite.anchorPoint.x,
                     sprite.contentSize.height * sprite.anchorPoint.y);

いずれかのノードの anchorPoint を変更すると、問題が複雑になります。それはあなたが気づいたオフセットを説明するかもしれません. 最初のケースでは、どちらのノードの anchorPoint も変更しません。2 番目のケースでは、スプライトの anchorPoint を変更できますが、ラベルは変更できません。

よくある間違いは、テクスチャの contentSize プロパティ (つまり、sprite.texture.contentSize) を使用することです。これにより、通常は 2 の累乗サイズであるテクスチャの寸法が得られるからです。たとえば、サイズが 100x200 の画像は 100x200 の sprite.contentSize を作成しますが、次に近い 2 のべき乗方向にパディングされるため、テクスチャのサイズは 128x256 になります。

ところで、あなたの例の画像は、フォントの上と下に同じ量のパディングを示しています。これは、「オーバードロー」文字または下付き文字などのために予約されたスペースである可能性があります。これは正常なようです。この種のパディングは、両側に同じ量のパディングがある限り、ラベルの中央揃えには影響しません。パディングは、使用しているフォントの種類によっても異なる場合があります。

ヒント: ccConfig.h を開き、次の行を変更して境界ボックスの描画をオンにします。

#define CC_SPRITE_DEBUG_DRAW 1

これにより、名前に関係なく、CCLabelTTF の境界ボックスもオンになります。問題のデバッグに役立つ場合があります。

于 2012-08-31T14:12:16.730 に答える