2013-09-07 5 views
0

Je veux faire pivoter un CCLabelTTF autour de son centre.Faire pivoter autour du centre d'un CCLabelTTF comme point d'achnor

Mais ça ne ressemble pas à ça. Cela ressemble plus à une rotation en bas du CCLabelTTF.

code:

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]; 

Comment tourner une lettre autour de son centre visible, si elle est un CCLabelTTF?

j'ai pu faire la limite d'une boîte CCLabelTTF visible:

cclabelttfboundingbox

Comme on le voit dans l'image, la zone de délimitation est beaucoup plus grand. Mais il n'y a pas de formule pour déterminer le milieu de la lettre.

+0

peuvent nous montrer comment voulez-vous créer votre action CCRotate? –

+0

Oui bien sûr, merci. – Binarian

Répondre

0

j'ai découvert comment trouver le point milieu d'une 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); 
1

Si vous définissez anchorPoint = cpp(0.5f,0.5f) sur un objet ccNode, il tournera autour de son centre, qui est calculé à l'aide de la propriété boundingBox.

Le problème est le boundingBox.size.height de l'étiquette diffère avec sa hauteur réelle. C'est pourquoi il ne tourne pas autour du centre.

Je ne suis pas sûr dans une telle solution manuelle, mais cela a fonctionné pour moi un jour.

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]]; 
+0

Il semble mieux que anchorPoint 0.5, 0.5 mais ce n'est pas le centre. Je vais essayer de comprendre ce que vous avez fait, peut-être que je peux trouver ce dont j'ai besoin. – Binarian

Questions connexes