1

所以基本上我想在精灵中添加一些文本并将其居中(无论文本大小如何,都将其居中,就像真正居中一样)

我想要的是

问题

这是调试绘图

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

假设 sprite 和 label 具有相同的父级:

label.position = sprite.position;

假设 label 是 sprite 的子项:

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

如果您修改任一节点的锚点,事情就会变得复杂。这可能解释了您注意到的偏移量。在第一种情况下,我不会修改任一节点的锚点。在第二种情况下,您可以修改精灵的锚点,但不能修改标签。

一个常见的错误是使用纹理的 contentSize 属性(即 sprite.texture.contentSize),因为这会给你纹理的尺寸,通常是两倍大小的幂。例如,尺寸为 100x200 的图像会创建一个尺寸为 100x200 的 sprite.contentSize,但纹理尺寸将是 128x256,因为填充到下一个最近的二维幂。

顺便说一句,您的示例图像在字体上方和下方显示了等量的填充。这可能是为“过度绘制”字符或下标等保留空间。这似乎很正常。只要两侧的填充量相等,这种填充不会影响标签的居中。填充也可能取决于您使用的字体类型。

提示: 打开 ccConfig.h 并通过修改此行打开边界框的绘制:

#define CC_SPRITE_DEBUG_DRAW 1

尽管名称如此,这也会打开 CCLabelTTF 的边界框。它可能会帮助您调试问题。

于 2012-08-31T14:12:16.730 回答