我想围绕它的中心旋转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
的边界框可见:
如图所示,边界框要大得多。但是没有确定字母中间的公式。
答案 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);