我是SpriteKit和遊戲開發的總新手,我一直在玩SpriteKit來製作戰略遊戲。我的後端架構使用一個網格系統來表示宇宙,我有空的案例和案例系統/行星/等...我的網格是由GameplayKit支持GKGridGraph
,我使用一種算法,生成隨機節點爲網格的每個節點添加屬性,並將其分類爲將自定義實體添加到它,這是此特定Universe案例的所有屬性。用SpriteKit渲染大網格
要渲染它,我只是用SKShapeNode
和SKPriteNode
各種顏色,形狀和質地。
我枚舉的所有節點(GKGridGraphNode
)在我GKGridGraph
實例,併爲每個這些節點我得到生成相應SKNode
的(我的SKNode
世代是每個GKGridGraphNode
實體連接對象的部件),並且我設置它們的位置,並將它們添加爲我的主要節點(我們稱之爲mapNode),這是一個簡單的SKNode
。最後它看起來像一個網格。
它適用於30/30網格,當滾動我的網格(自定義實現,我修改我的mapNode位置作爲用戶移動他的手指)時,我有60 FPS。 但是,當我嘗試50/50或100/100網格時,屏幕上的字節數太多,無法滾動。我知道我不應該添加的每個節點我的屏幕上,所以我想到了各種策略,我想對他們的一些輸入:
而不是滾動我mapNode,我可能只呈現我看到的節點然後在用戶向左/向右/向上/向下滾動時添加/刪除節點。所以它不再是真正的滾動,它會模擬它。我能想到它,但實際上並不是我應該如何實施它。這是正確的解決方案嗎?
也許我可以渲染我所有的節點作爲一個大節點?有沒有辦法做到這一點?但後來我會放鬆一些函數,如
nodeAtPosition
,我廣泛使用它來獲取與我的節點相關聯的實體(自定義對象)。
編輯:其實,我當前的代碼是開源的,這裏是我渲染場景:https://github.com/Dimillian/LittleOrion/blob/master/Little%20Orion/Little%20Orion/scenes/UniverseScene.swift
是否有這樣做的任何其他聰明的辦法?
你確認這是慢實際的設備? – hamobi
是的,模擬器上的17 FPS,設備上的靜態節點40 FPS,但是一旦你開始移動你的手指,它的失速就會低於1 FPS,並且你無法有效地滾動它。 – Dimillian
當內容滾動時,您必須動態加載和卸載數據到精靈套件節點。您無法提前加載所有數據,只需更改代碼即可動態測試方形重疊,以確定要加載和呈現哪些節點。這與平鋪基本相同,因此您可能希望查看iOS 10中的新Tile支持並在此基礎上進行構建。 – MoDJ