基本的に、スプライト内にテキストを追加して中央に配置したい(テキストのサイズに関係なく、実際に中央に配置するのと同じように中央に配置する)
3 に答える
設定できます
myLab.position = ccp(mySprite.contentSize.width/2, mySprite.contentSize.hieght/2);
[mySprite addChild: myLab];
これを使って楽しんでください...
デフォルトでは、位置をラベルの中央に設定します。もちろん、変更していなければアンカーポイントです。だから、このコード
[label setPosition: ccpMult(ccpFromSize(sprite.contentSize), 0.5f) ];
[sprite addChild: label];
ラベルを中央に配置します
スプライトとラベルの両方が同じ親を持つと仮定します。
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 の境界ボックスもオンになります。問題のデバッグに役立つ場合があります。