2014-04-04 51 views
6

當我環顧四周約spritekit紋理信息,我偶然發現了這句話:使用spritekit渲染單個繪圖過程中的節點?

如果所有節點的孩子使用相同的混合模式和紋理圖集,然後雪碧套件通常可以借鑑這些在一個繪圖通過精靈。另一方面,如果孩子的組織結構使得每個新精靈的繪圖模式都發生變化,那麼Sprite Kit可能會作爲每個精靈的一個繪圖過程執行,效率相當低。

但檢查了這一點:

瓷磚用相同的紋理(我向你保證,它的紋理,而不僅僅是一種顏色) Untextured tiles

瓷磚用自己的紋理 Textured tiles

的繪製數量有40的差異,儘管所有的紋理都來自相同的圖集。

我解釋「atlas」這個詞是否錯了?

這是我存放我的圖片:

texture atlas

是我的例如「紋理圖集」,或者是「阿特拉斯」這裏包含了所需的所有圖像的單個巴紐的定義,並從中切出個別的瓷磚?

或者問題可能是我如何加載/其他東西?

謝謝!

回答

5

這裏的問題很可能是因爲節點圖本身。假設你有100個精靈作爲場景的子女,並沒有他們自己的子女,他們都使用來自同一圖集和默認混合模式的紋理,然後Sprite Kit將在一次繪製調用中批量繪製這100個精靈。

但是,如果這些tile sprites有自己的孩子,或許是用於調試的形狀或標籤節點,那麼這將「中斷」批處理繪製操作。

檢查您的節點圖。確保所有的貼圖精靈都是同一父母的孩子,並且沒有自己的孩子,使用相同圖集的相同混合模式和紋理。然後批量繪圖肯定會工作。

如果這不起作用,請驗證tiles.atlas文件夾已正確轉換爲捆綁包中的紋理圖集。如果打開已編譯的應用程序包,則應該找到一個名爲「tiles.atlasc」的文件夾,其中包含plist和一個或多個png文件,其中包含該文件夾的所有單個圖像。此外,這些單獨的圖像都不應該出現在包中 - 如果它們作爲獨立文件添加到包中,使用與圖集中相同的名稱,那麼Sprite Kit將默認加載單個圖像文件,而不是從紋理圖集中獲取它們。

+0

嗯,這仍然不起作用。精靈節點是節點的子節點,而不是場景,這是問題嗎?他們都沒有孩子。編輯:我是一個偶像。我的一種瓷磚類型是指圖像文件夾中的圖像......而且這一塊瓷磚正在擰緊它。它恰巧是我堅實的地面瓷磚... – IAmTheAg

+0

呃......幫我解決一件事。以這種方式加載紋理似乎非常低效。現在初始化精靈需要更長的時間,因爲瓷磚地圖需要不斷循環並在繼續生成時生成。初始化這個精靈的最快方法是什麼? – IAmTheAg

+1

好吧,如果你運行..imageNamed:方法很多(精靈和紋理/ textureatlas),可能會產生大量的開銷。對於我的地圖,我將這兩個地圖集保存在一個強大的引用中,並將數組中的紋理(由GID索引)快速訪問。看看狗頭人套件中的地圖渲染器。 – LearnCocos2D