2016-06-26 96 views
1

目前我有一個SKTextureAtlas太大,無法快速加載。它包含我遊戲中所有敵人的紋理。我想分解地圖集,所以遊戲只加載一定水平所需的紋理。然而,一些敵人出現在多個層面。我應該如何拆分地圖集?我不想爲每個關卡創建一個地圖集,因爲我必須爲重複的敵人重複圖像文件,並且在有很多關卡時會變得很煩人。有沒有更優雅的方法?在遊戲中爲多個關卡分割SKTextureAtlas的最佳方式是什麼?

+0

爲什麼你會在這種情況下使用地圖集?圖集的全部內容是聯合圖像。只是不要使用地圖集,你不需要分割圖像。 – MoDJ

+0

單獨使用圖像效率不高,因爲SpriteKit會爲每個紋理執行渲染過程。 –

+0

我看到在以60 FPS將多個OpenGL紋理合成到同一幀中時,沒有任何問題。也許在GPU和CPU具有不同內存空間以及需要從一種內存轉移到另一種內存的Mac上,運行時性能明顯不同,但在iOS上使用Atlas似乎與性能幾乎沒有關係。 – MoDJ

回答

0

一個好的方案是,當整個關卡的屏幕上所有可見的精靈都進入相同的紋理圖集時。在這種情況下,Texture Atlas被加載到GPU中並保持在那裏。 在每一幀期間,CPU只需要通知GPU關於每個精靈的座標/位置/轉換,節省大量的數據傳輸。

我知道這可能會迫使你複製一些精靈,因爲它們中的一些可用於多個級別。只有你(作爲你的遊戲的開發者)可以採用的東西。

Apple docs

當你創建一個紋理圖集,你想罷工收集太多的紋理或太少之間的平衡。如果您使用的圖片太少,則SpriteKit可能仍需要許多繪圖工具才能渲染幀。如果包含太多圖像,則可能需要將大量紋理數據一次加載到內存中。由於Xcode爲您創建地圖集,因此您可以相對輕鬆地在不同的地圖集配置之間切換。因此,請嘗試使用紋理地圖集的不同配置,並選擇能夠提供最佳性能的組合。

+1

謝謝!我在使用紋理圖集的時候忘記了spritekit的渲染效率,所以看起來每個關卡都有一個走向。 –

相關問題