2016-07-27 5 views
1

Ich habe einen SKShapeNode namens smallScreen und einen SKLabelNode mit dem Namen screenLabel erstellt.SKLabelNode wird nicht angezeigt [SpriteKit]

Ich versuchte später screenLabel in smallScreen anzuzeigen. Als ich den Code jedoch ausgeführt habe, hat es nicht funktioniert. Ich habe versucht, screenLabel als Kind zu sich selbst hinzuzufügen, und das schien den Text anzuzeigen. Jedes Mal, wenn ich screenLabel als Kindknoten zu smallScreen hinzufügte, wurde es nicht angezeigt. Bitte helfen Sie, vielen Dank.

self.smallScreen = (self.childNodeWithName("screen") as? SKShapeNode)! 
    self.smallScreen.position = CGPoint(x: self.frame.size.width/2, y: self.frame.size.height * 2/3) 

    screenLabel.text = "Screen" 
    screenLabel.fontSize = 30 
    screenLabel.fontColor = UIColor.redColor() 
    screenLabel.position = CGPoint(x: self.frame.size.width/2, y: self.frame.size.height * 2/3) 
    screenLabel.hidden = false 
    self.smallScreen.addChild(screenLabel) 
+0

Wenn das Problem gelöst ist, bitte die Frage als gelöst markieren, danke. –

Antwort

0

Im Sprite-Kit wird standardmäßig der Ursprung einer Szene in der unteren linken Ecke der Ansicht platziert. Sein Standardwert ist CGPointZero und Sie können es nicht ändern. (source).

Ein Sprite (SKSpriteNode) Ankerpunkt ist standardmäßig auf (0.5,0.5), was der Mitte des Rahmens entspricht (source).

SKShapeNode hat keinen Ankerpunkt.

LearnCocos2D zu diesem Thema beantwortet:

Wenn Sie ein Bild verwenden, müssen Sie möglicherweise auf seiner Knoten Position auszurichten. Es gibt keine andere Möglichkeit, dies zu tun, aber über anchorPoint, weil das Image selbst nicht geändert werden kann (nicht einfach). Wenn Sie eine Form erstellen, haben Sie die volle Kontrolle über die Ausrichtung von die Form über CGPath. Sie können den Pfad einfach umwandeln, um die Ausrichtung der Form relativ zur Position des Knotens zu ändern.

Dies ist meine Interpretation, nicht Tatsache.

Also, was ist mit Ihrem Code passiert?

Ich weiß nicht, wie Sie Ihre Form initialisiert haben, mache ich ein Beispiel nur:

/* Create a Shape Node representing a rect centered at the Node's origin. */ 
    @available(iOS 8.0, *) 
    public convenience init(rectOfSize size: CGSize) 

So schaffen wir die Form wie folgt aus:

self.smallScreen = SKShapeNode.init(rectOfSize: CGSizeMake(200,200)) 

Zum ersten Mal, Ihr Ort, um Ihre SKShapeNode an die X-Mitte des Bildschirms für die X-Koordinaten und Y = self.frame.size.height * 2/3. In der Tat ist Ihr smallScreen sichtbar.

Wenn Sie über Ihr Etikett sprechen, müssen Sie es zur smallScreen hinzufügen, so dass screenLabel die Ausrichtung seiner Eltern berücksichtigen muss. In der Tat Sie Ihr Etikett einfach durch diese Änderung sehen:

Von:

screenLabel.position = CGPoint(x: self.frame.size.width/2, y: self.frame.size.height * 2/3) 

An:

screenLabel.position = CGPointZero 

und das Etikett der Mitte des smallScreen nach der positioniert ist, Ausrichtung seiner Eltern.

+0

'Im Sprite-Kit wird standardmäßig der Ursprung einer Szene in der unteren linken Ecke der Ansicht platziert. Sein Standardwert ist CGPointZero und Sie können es nicht ändern. (Quelle). "Nicht sicher, was du damit meinst? Sie können den Ankerpunkt der Szene ändern, um (0,0) die Mitte zu machen. – Knight0fDragon

+1

Ahh, du meinst zu sagen, seine Standardposition ist Null und kann nicht geändert werden, was sinnvoll ist, weil die Szene keine Position haben sollte – Knight0fDragon

+1

Danke für deine Zeit! Es stellt sich heraus, dass die Koordinate für die Mitte des kleinen Bildschirms (0,0) ist, ich nehme an, dass es sich von dem selbst koordinierenden System unterscheidet, da ich screenLabel zu smallScreen anstelle von self hinzufüge. Der Code funktioniert jetzt für mich. Yay! –