因為要使用的資源文件是一組小的圖片, 我們需要先將其生成一張大的圖片,將所有小圖片都包含在其中, 最好的方式是使用第三方工具來實現這個功能。
1. 首先下載TexturePacker 寫該文章時最新的版本是4.1.0
下載地址為:https://www.codeandweb.com/blog/2013/09/23/spritekit-animations-and-textureatlases
2. 啟動TexturePacket拖動自己准備好的圖片,直接拖動到工作區, 他會自動變成一張圖片。
我這裡面做了10個數字的圖片,拖到工程中後效果如下:
3. 拖入資源文件後, 需要選擇一下數據格式, 因為我用的是蘋果自己的SpriteKit,而不是cocos之類的第三方框架, 因此需要手動修改一下DataFormat, 如下圖所示:
4. 通過Atlas bundle來設置輸入文件所在的位置,我們這裡指定生成的文件名為textureNumber.atlasc,然後設置Header file如下圖所示,都設置好後,點擊Publish Sprite Sheet按鈕,如果沒有出現問題我們要的文件就生成了.<喎?/kf/ware/vc/" target="_blank" class="keylink">vcD4KPHA+PGltZyBzcmM9"/uploadfile/Collfiles/20160422/20160422091001582.png" alt="\">
5. 打開Finder 找到我們上面指定的的文件位置,你會看到生成了一個目錄,和一頭文件,目錄中還包含了兩個文件,一個png和一個plist.
6. 拖動生成的目錄和頭文件到我們的工程中(Xcode), 在彈出的提示對話框中, 選擇 create folder references 以及 確認 add to targets 選中.
7. 接下來我們就可以使用我們剛剛加進來的資源文件了,首先在我們要使用的場景文件中加上剛剛生成的頭文件的引用,#import"textureNumber.h",頭文件中包含了所有資源的宏定義,便於我們使用,文件內容如下:
8. 接下來在我們現有的場景GameScene.m 文件中的didMoveToView方法中加入如下測試代碼:
9. 然後編譯運行我們現有的游戲程序,就能看到效果,在屏幕的中下方出現了數字0的圖片。
10. 那麼現在問題來了, 一個游戲裡面會有多張這類的圖片,我可能會按分類增加多個atlasc貼圖集,比如數字圖片集,子彈圖片機,角色圖片集等等,為了目錄分類更清楚,我創建了一個resource目錄,將多個圖片集都放到統一目錄下管理(藍色文件夾),會在打包的app中帶目錄的形式,如下圖所示。
11. 為了做一個試驗,我第二次創建的貼圖集裡面小圖片名跟第一次創建的圖片名稱完全一樣,也是0,1,2,3.....這樣會出現什麼現像呢,直接運行之前的程序看一下效果。
如下圖所示, 我們看到之前的0沒有了, 出現了一個紅色叉, 這個表示資源加載出錯了,找不到我們資源了。
12. 這裡面有兩個問題, 一個是加了一層目錄, 原來路徑找不到了, 另個一個是圖片名重復, 系統也不知道加載哪個, 這樣我們就應變先加載指定貼圖集,再取其中包含的貼圖資源,解決方式如下:
13.再一次編譯運行程序, 最好先clean一個工程,然後再編譯運行,我們看到貼圖0又顯示出來了, 雖然跟之前結果一樣, 但實現方案完全不同, 後面的方式更宜於使用。
10. 總結, 使用貼圖集的方式加載可以有效提升游戲的執行效率,而且圖片資源過多時,更宜於分類的管理,是游戲中更好的資源圖片的使用方式。