2016-07-27 57 views
1

我創建了一個叫做smallScreen的SKShapeNode和一個名爲screenLabel的SKLabelNode。SKLabelNode不顯示[SpriteKit]

我後來試圖在smallScreen中顯示screenLabel。但是,當我運行代碼時,它不起作用。我試圖將screenLabel作爲一個孩子添加到自己,並且似乎允許顯示文本。每當我將screenLabel作爲子節點添加到smallScreen時,它都不會顯示。請幫助,非常感謝。

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

如果您的問題解決了,請將quesiton標記爲已解決,謝謝。 –

回答

0

在Sprite-kit默認情況下,場景的原點放置在視圖的左下角。其默認值爲CGPointZero,您無法更改它。 (source)。

精靈的(SKSpriteNode)定位點默認爲(0.5,0.5),它對應於幀的中心(source)。

SKShapeNode沒有錨點

LearnCocos2D回答了這個問題:

當您使用圖像您可能需要對齊其節點的位置。 沒有其他方法可以這樣做,但通過anchorPoint,因爲 圖像本身不能被修改(反正也不容易)。

當您創建一個形狀時,您可以完全控制通過CGPath對齊形狀 。您可以簡單地轉換路徑以更改形狀相對於節點位置的對齊方式。

這是我的解釋,不是事實。

那麼,發生了什麼事你的代碼

我不知道你是如何初始化你的形狀,我做只是舉個例子:

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

所以我們創建的形狀是這樣的:

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

第一次,你的地方你SKShapeNode到X座標屏幕的X中心,Y = self.frame.size.height * 2/3。事實上,您的smallScreen是可見的。

說到你的標籤,你已經將它添加到smallScreen,所以screenLabel必須尊重他的父母的對齊。 其實你可以通過這個變化只是看到你的標籤:

來源:

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

要:

screenLabel.position = CGPointZero 

和您的標籤根據定位於smallScreen中心他的父母對齊。

+0

'在默認的Sprite-Kit中,場景的原點放置在視圖的左下角。它的默認值是CGPointZero,你不能改變它。 (來源)。「不確定你是什麼意思?您可以更改場景的定位點以使(0,0)爲中心。 – Knight0fDragon

+1

啊,你的意思是說它的默認位置是零,不能改變,這是有道理的,因爲場景不應該有位置 – Knight0fDragon

+1

感謝您的時間!事實證明,smallScreen中心的座標是(0,0),我猜測它與self的協調系統不同,因爲我將screenLabel添加到smallScreen而不是self。該代碼現在適用於我。好極了! –