所以基本上我想在精灵中添加一些文本并将其居中(将其置于中心位置,无论文本的大小如何)
答案 0 :(得分:4)
你可以设置
myLab.position = ccp(mySprite.contentSize.width/2, mySprite.contentSize.hieght/2);
[mySprite addChild: myLab];
用这个享受...
答案 1 :(得分:1)
默认情况下,您将位置设置为标签的中心。当然,如果你没有改变它的锚点。所以,这段代码
[label setPosition: ccpMult(ccpFromSize(sprite.contentSize), 0.5f) ];
[sprite addChild: label];
将您的标签放在中心
答案 2 :(得分:1)
假设精灵和标签都有相同的父级:
label.position = sprite.position;
假设label是精灵的孩子:
label.position = ccp(sprite.contentSize.width * sprite.anchorPoint.x,
sprite.contentSize.height * sprite.anchorPoint.y);
如果修改任一节点的anchorPoint,则会使问题复杂化。这可能解释了你注意到的偏移。在第一种情况下,我不会修改任何节点的anchorPoint。在第二种情况下,您可以修改精灵的anchorPoint而不是标签。
一个常见的错误是使用纹理的contentSize属性(即sprite.texture.contentSize),因为这将为您提供纹理的尺寸,通常是两个尺寸的幂。例如,尺寸为100x200的图像会创建一个100x200的sprite.contentSize,但由于填充到下一个最接近的二维幂,纹理尺寸将为128x256。
顺便说一句,您的示例图片在字体上方和下方显示相等数量的填充。这可能是“透支”字符或下标和类似的预留空间。这似乎很正常。只要两侧有相同数量的填充,这种填充不会影响标签的居中。填充还可能取决于您正在使用的字体类型。
提示强> 打开ccConfig.h并通过修改此行打开边界框的绘图:
#define CC_SPRITE_DEBUG_DRAW 1
这也打开了CCLabelTTF的边界框,尽管名称。它可能会帮助您调试问题。