围绕CC LabelTTF的中心旋转作为锚点

时间:2013-09-07 18:13:12

标签: objective-c cocos2d-iphone

我想围绕它的中心旋转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

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

2 个答案:

答案 0 :(得分: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]];

答案 1 :(得分:0)

我发现了如何找到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);