所以基本上我想在精灵中添加一些文本并将其居中(无论文本大小如何,都将其居中,就像真正居中一样)
问问题
982 次
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 回答