2017-06-13 5 views
1

Ich versuche, einen Text in der Mitte der Szene mit einer bestimmten Größe zu zentrieren.Ursprungspunkt eines CGRect in SpriteKit

func addCubeExperienceLabel(_ buttonSize : CGSize, _ buttonPos : CGPoint, _ world : Int) { 
    let price = SKLabelNode(fontNamed: "LCDSolid") 
    price.text = String(WorldPrices.fromInt(world).rawValue) 
    price.zPosition = 50 
    adjustLabelFontSizeToFitRect(labelNode: price, rect: CGRect(origin: CGPoint(x: 0, y: 0), size : buttonSize)) 
    self.addChild(price) 
} 

So verwende ich die adjustLabelFontSizeToFitRect:

adjustLabelFontSizeToFitRect(labelNode: price, rect: CGRect(origin: CGPoint(x: 0, y: 0), size : buttonSize)) 

Um die Größe des SKNodeLabel auf eine bestimmte Größe anpassen. Aber ich möchte, dass der Ursprung dieses Etiketts der Mittelpunkt des Bildschirms ist, also (0,0), da der Ankerpunkt 0,5, 0,5 ist. Allerdings bekomme ich diese:

enter image description here

Die adjustLabelFontSizeToFitRect() ist dies:

func adjustLabelFontSizeToFitRect(labelNode:SKLabelNode, rect:CGRect) { 

    // Determine the font scaling factor that should let the label text fit in the given rectangle. 
    let scalingFactor = min(rect.width/labelNode.frame.width, rect.height/labelNode.frame.height) 

    // Change the fontSize. 
    labelNode.fontSize *= scalingFactor 

    // Optionally move the SKLabelNode to the center of the rectangle. 
    labelNode.position = CGPoint(x: rect.midX, y: rect.midY - labelNode.frame.height/2.0) 
} 

Antwort

1

Werfen Sie einen Blick auf die horizontalAlignmentMode und die verticalAlignmentMode eines SKLabelNode. Es ist eine Art "Ankerpunkt" für Beschriftungen und kann verwendet werden, um die horizontale und vertikale Position von Text innerhalb eines SKLabelNode anzupassen.

Standardmäßig ist verticalAlignmentMode auf .baseline festgelegt, und horizontalAlignmentMode ist auf .center eingestellt. Der "Ursprung" befindet sich also nicht genau in der Mitte des Etiketts.

Sie wissen nicht, ob dies der Effekt ist für Sie suchen, aber wenn Sie das Etikett wollen in der Szene zentriert werden, würde ich nur diese Zeilen in der addCubeExperienceLabel Methode hinzufügen:

price.position = CGPoint.zero 
price.verticalAlignmentMode = .center 
price.horizontalAlignmentMode = .center 

Setzen Sie horizontalAlignmentMode auf .left, wenn der Text in der Mitte des Bildschirms starten soll. Im Moment befindet sich die Mitte des Textes in der Mitte des Bildschirms.

Beachten Sie, dass die Position des Etiketts in addCubeExperienceLabel und nicht in adjustLabelFontSizeToFitRect festgelegt ist. Wenn Sie die Schriftgröße der Beschriftung anpassen, sollte sie immer noch an ihrer Position verbleiben, genau wie ein normaler SKSpriteNode in seiner Position bleibt, nachdem seine Größe angepasst wurde.

Hoffe, das hilft!

+0

Es hat sich überhaupt nichts geändert – Pablo

Verwandte Themen