2016-12-31 77 views
1

這是一個關於實施最佳實踐的問題。舉個例子,我會參考一個叫做Pixel Claw的簡單遊戲。Swift SKSpriteNode:複雜的雪碧紋理?

假設我有一個SKSpriteNode類似於Pixel Claw的爪子,因爲SKSpriteNode可能是「持有」是可變的(但在可能性方面有限,例如四個不同的對象)。

節點SKSpriteNode所持有的節點本身沒有任何代理。

因此,我的問題是:使用不同的紋理,如爪,持有物體a的爪,持有物體b的爪等等,還是有兩個SKSpriteNode s,並將SKSpriteNode與爪紋理放在一起到SKSpriteNode與對象紋理?

我不是在做一個爪子游戲,它只是第一個彈出我腦袋的例子,兩個都可能是合理的解決方案。前者更簡單 - 只需切換紋理,後者更具概括性。

如果後者是四周最好的解決方案,那麼如何將兩個精靈的運動「配對」呢?

回答

1

我會使用第二種方法,特別是如果對象a和b在某個點可能脫落爪子。

您應該製作爪的紋理,物體a的紋理和物體b的紋理。

要使物體與爪同步移動,只需將該物體作爲爪節點的添加即可。這樣,移動爪子也會使物體移動!

請注意,在將對象添加爲子對象之前,需要確保該對象沒有父對象。如果確實如此,則必須先將其從父項中刪除,然後再將其添加爲爪子的子項。當你從爪子「釋放」對象時,同樣的事情也適用:你需要首先從它的父對象(爪子)中移除對象,然後將它添加爲所需父對象的子對象。

+0

這是一個非常有見識的答案,我沒有意識到'SKSpriteNode'的父母/子女關係就像那樣工作。你能否提供一些僞代碼? – SumNeuron

+0

@SumNeuron最難的部分就是真正繪製紋理。您只需首先調用'object.removeFromParent()'以確保它沒有父級。然後調用'claw.addChild(object)'將該對象添加爲子對象。您還需要設置'object'的位置和定位點,以確保它位於正確的位置。你甚至不需要if語句。 – Sweeper