0

我想围绕它的中心旋转一个 CCLabelTTF。

但它看起来不像。它看起来更像是 CCLabelTTF 底部的旋转。

代码:

CCLabelTTF *aLabel ... init/addChild and so on

CCRotateBy *rotateLabelA = [[CCRotateBy alloc] initWithDuration:0.5f angle:-60.0f];

aLabel.string = @"0";
aLabel.anchorPoint = ccp(0.5f, 0.5f);
[aLabel runAction:rotateLabelA];

如果它是 CCLabelTTF,如何围绕其可见中心旋转一个字母?

我能够使边界框CCLabelTTF可见:

cclabelttfboundingbox

如图所示,边界框要大得多。但是没有确定字母中间的公式。

4

2 回答 2

1

如果您设置anchorPoint = cpp(0.5f,0.5f)为某个 ccNode 对象,它将围绕其中心旋转,这是使用 boundingBox 属性计算的。

问题是标签的 boundingBox.size.height 与其实际高度不同。这就是为什么它不围绕中心旋转。

我不确定这样的手动解决方案,但有一天它对我有用。

    CCLabelTTF *label = [CCLabelTTF labelWithString:@"0" fontName:@"Marker Felt"fontSize:24];
    label.position = ccp(winSize.width /2.0f, winSize.height / 2.0f);

    float fontSize = label.fontSize; // actual Font size
    float labelHeight = label.contentSize.height; // actual label height ( the same as boundingBox.size.height
    float offset = (labelHeight - fontSize - (labelHeight - fontSize) / 2.0f) / labelHeight / 2.0f;
    label.anchorPoint = ccp(0.5f, 0.5f + offset);

    [layer addChild:label];
    [label runAction:[CCRotateBy actionWithDuration:10.0f angle:-360]];
于 2013-09-07T19:13:46.797 回答
0

我发现了如何找到 a 的中点CCLabelTTF

    float fontSize = bLabel.fontSize; // actual Font size in pixels
    float labelHeight = bLabel.contentSize.height; // actual label height ( the same as boundingBox.size.height )
    float offset = labelHeight - fontSize; // the free room under the font
    float halfFontSize = fontSize / 2;
    float percentMiddleOfFont = (halfFontSize + offset) / labelHeight;

    bLabel.anchorPoint = ccp(0.5f, percentMiddleOfFont);
于 2013-09-08T12:57:12.163 回答