13.精靈進階之幹活篇

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執行效率還是很低,但是如果一股腦的全部放入,那麼多紋理數據全局放入內存中,估計夠嗆!說到最後,你纔是主導者,有效的分類,以及在多個紋理圖集之間切換我想是最好的方法。

下集高潮來臨,如何將紋理放入到紋理圖集並運用,謝謝觀看,在再見!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章