13.精靈進階之幹活篇上
前文曾提及一種創建有紋理的精靈一步到位的方法,即在創建sprite
同時也創建了相應地texture
,不知客官還有印象。無疑這是一種簡便的方法,但往往在實際開發一款複雜遊戲時,你需要全盤接管紋理,比如遇到以下幾種情況:
- 多精靈之間共用一個紋理(簡單理解成可複用的圖片吧,雖然不是很恰當)。
- 假如已經創建完一個有紋理精靈,此時你想更換一個新的紋理給它。
- 採用一個紋理集合製作精靈動畫。
- 有時候創建紋理的數據並非來自於app bundle,比如從網絡下載。
- 將紋理預(提前)加載到內存中,當然是在呈現場景之前。
接下來我們將頻繁接觸SKTexture
對象,生成紋理之後在使用它來創建一個新的精靈或爲已存在的精靈“換裝”。
加載App Bundle中的圖片創建紋理
我想這是最常用的方法了,當你的設計師爲你設計好一套圖片,由你導入應用中,然後在實際代碼中加載即可。通常代碼是這樣寫的:
//代碼純手工打入,且已簡單形式給出 關鍵部分必定詳細
//只創建一次紋理即可 所以叫可複用圖片 也就是多次使用
let rocketTexture = SKTexture(imageNamed:"rocket.png")
for i = 0;i<0;i++{
let rocket = SKSpriteNode(texture:rocketTexture)
rocket.position = ... //自己定吧
self.addChild(rocket)
}
有時候紋理對象本身就好比一個佔位符,不過已經包含了實打實的紋理數據(記住:程序都是0、1組成,到最後都是一串0、1),或許是因爲紋理數據資源佔用量大(我的理解),所以Sprite Kit 只會在有需要時才加載到內存中。
使用紋理圖冊(Texture Atlases)
實際開發中,我們會有灰常灰常多的圖片,如果細分之下或許被歸類到不同分類之中,比如人物的面貌一類、怪物的面貌一類、背景一類等等,這樣有效的管理自然Sprite Kit
也是支持的,也就是Texture Atlases
,怎麼劃分來的合理呢?官方文檔給了以下幾種:
- 一個人物的動畫幀(比如一套技能動作或者人物行進動作 往往就是幾張或十幾張圖片組成)。
- 遊戲的關卡圖片。
- 一些控件的圖片(
button
,switch
,slider
等)
試想下,假如我們不有效管理這些散亂的對象,SpriteKit
和圖形硬件估計要累的夠嗆,自然你的遊戲執行效果也不會太理想。現在有了Texture Atlases
,一切都將變得美好。儘管現在是一個紋理圖冊,但是你仍然可以通過SKTexture
來使用它們。
創建紋理圖冊
創建方法其實很簡單,只需要把一個文件的後綴名改成atlas
即可。
這一小節到此結束,謝謝,再見!
…
…
…
等等,這並非我的意願,那麼我們來談及下如何用好一個紋理圖冊。
試想下我們創建了一個紋理圖冊,可曾考慮過裏面的內容過多或是過少,如何平衡是個關鍵點!假如過少,那麼意義不大,Sprite Kit
執行效率還是很低,但是如果一股腦的全部放入,那麼多紋理數據全局放入內存中,估計夠嗆!說到最後,你纔是主導者,有效的分類,以及在多個紋理圖集之間切換我想是最好的方法。
下集高潮來臨,如何將紋理放入到紋理圖集並運用,謝謝觀看,在再見!