2017-01-11 121 views
2

使用一個或多個SKScenes我正在使用SpriteKit水平基礎的遊戲。我想知道進行水平改變的最佳做法。我最初使用一個場景作爲我的遊戲場景,當一個級別完成時,它將刪除場景中的所有節點,然後添加下一個級別的節點。我正在使用在整個遊戲過程中持續存在的背景節點。我很擔心內存,因爲我不認爲ARC會釋放因爲場景持久而被移除的節點。這個方法是否正確,或者我應該在關卡變化時實例化一個新場景?基於級別的遊戲

回答

2

最好的做法是從遊戲代碼中分離遊戲數據和資產。通過這種方式,您可以在不必重新編譯的情況下對其進行更改(如果您正在與另一個未編碼的人一起工作,則該功能很方便)。

下面是蘋果有在WWDC 2014年說的那樣:  :


當場景之間轉換,ARC會回收前的場景,假設你再沒強引用它。既然你開始它不可能你需要擔心這個,現在...它主要與全局和瓶蓋做的,你應該能夠解決它如果它成爲一個問題(但可能不會)。

您可以使用像unowned selfweak var等東西,以確保在需要時不會發生這種情況。再次,這是一個更高級的話題,但很好意識到它們。

真的,決策層的變化完全取決於你...如果你想的是,CDS出來的東西一個場景中的狀態管理器,你當然可以這樣做......或者,你可以讓一堆場面並過渡到這一點。再一次,這裏的最佳實踐是將遊戲內容與遊戲代碼分離,而不一定是如何切換場景。個人而言,我會單獨使用SKScenes - 因爲它已經內置了轉換,內存管理 - 並且您可以選擇使用編輯器,並且您可以根據需要爲每個場景分配自己的文件。

還有GameplayKit具有statemanager,在這種情況下,你可以使用一個場景,並有不同的狀態是水平。

這裏有一些資源,埋藏有關於你想要的一些金塊。

https://developer.apple.com/library/content/documentation/GraphicsAnimation/Conceptual/SpriteKit_PG/DesigningGameswithSpriteKit/DesigningGameswithSpriteKit.html

https://developer.apple.com/videos/play/wwdc2014/608/

https://developer.apple.com/library/content/samplecode/DemoBots/Listings/DemoBots_SceneManager_swift.html