2017-01-01 22 views
2

我正在繼承SKNode來渲染由許多SKSpriteNodes組成的地圖,並將這些節點添加到我的子類中。當繼承SKNode時,Frame屬性應該返回一個非空值嗎?

一切工作正常,但我發現我的節點子類的Frame始終爲0

在文檔中我找不到這事,所以:我應該重寫Frame財產和收益一個正確的值?

+0

你能澄清'框架...總是0嗎?框架應該是一個CGRect結構,因此不能爲零。通常對於SKNode,框架將具有有效位置,但寬度和高度均爲零。如果它本身在場景中的位置爲0,0,則其所有成員都將爲零。這是正常的,不需要重寫幀。如果你想要它的子框架,然後使用方法calculateAccumulatedFrame。 –

+0

我的意思是寬度和高度均爲0。我注意到SKSpriteNode有一個有效的寬度和高度。 – Krumelur

回答

3

frame屬性是節點本身的框架,忽略任何子節點。對於SKNode,這是一個位置,但寬度和高度都爲零。

如果節點的類繪製內容,則該框架非空。 (https://developer.apple.com/reference/spritekit/sknode

這我理解爲:SKNode平沒有內容,所以它是正確的它是空的。

節點其孩子的框架是由需要的子樹應該呼叫的幀,而不是參考幀屬性的方法calculateAccumulatedFrame()和功能提供。

所以應該不需要覆蓋你的SKNode的幀。我從來沒有,在幾個應用程序有類似的結構 ,並且還沒有問題...

+0

有道理。什麼是「繪製內容」節點的例子? – Krumelur

+0

@Krumelur:SKSpriteNode或SKLabelNode - 都從SKNode繼承,但具有可繪製內容,因此根據該內容將具有寬度和高度。 –

相關問題