14.精靈進階之幹活篇下

14.精靈進階之幹活篇下

首先請允許爲我們的團隊博客Optional Swift 介紹一番,提供swift基礎入門教程講解,框架學習,UI設計,控件學習等等

optional swift team 博客地址

前文有提供了一種創建紋理的構造方法,具體是怎麼實現的呢?Sprite Kit首先是通過明確的文件名來查找圖片文件(非紋理圖集),假如沒有找到,那麼它將遍歷app bundle中的所有紋理圖集。這意味着遊戲項目中,你無需對代碼做出更改來支持這種情況。當你設計完圖片,往紋理圖集一扔即可,它將自動包含,你不要重新build

接下來討論SKTextureAtlas,當你想要明確對某一個紋理圖集進行操作,那麼使用它再好不過!首先創建一個紋理圖形對象(texture atlas object);接下來,使用紋理的名字來添加到剛纔創建的紋理圖集中。下面的例子是有實際開發意義的,怪物的行走就是通過一個紋理圖集(包含多張紋理,玩過gif的朋友應該知道,其實gif也就是由多張連續圖片組成)來Animate的。假象在我們實際的工程中,我們已經添加了一個monster.atlas文件夾,裏面有4張圖片,實現代碼如下:

    //創建紋理圖集
    let atlas = SKTextureAtlas(named: "monster")
    //創建紋理
    let f1 = atlas.textureNamed("monster-walk1")
    let f2 = atlas.textureNamed("monster-walk2")
    let f3 = atlas.textureNamed("monster-walk3")
    let f4 = atlas.textureNamed("monster-walk4")

    //創建一個數組包含  f1 f2 f3 f4屬於atlas這個圖集的
    let monsterWalkTextures = [f1,f2,f3,f4]

注:
一幀就是一張圖片!

創建紋理方式二

首先再次聊到紋理,就是可複用圖片,我們多次用到了SKTexture來創建一個紋理,非常酷!本節介紹另外一種方法,說來也有點意思,既然紋理是一張圖片,我們是否可以截取圖片的”一角”來創建新的紋理呢?答案自然是肯定的,創建的紋理類型依然是SKTexture,代碼如下:

    //cornerTextures 類型是SKTexture
    let bottomLeftTexture = SKTexture(rect: CGRectMake(0.0, 0.0, 0.5, 0.5), inTexture: cornerTextures)

讓精靈動起來!

精靈(Sprite)的紋理屬性(texture)指向當前紋理(即當前賦予的)!覺得單調?換掉它!這樣精靈的紋理屬性就指向了我們喜歡的紋理了。下一次場景進行渲染時,就會改成新的紋理。不過,任何時候替換成新的紋理,我們可能還需要對其他屬性進行設置,例如:sizeanchorPointcenterRect。通常我們最好保證設計好的一套紋理圖冊中的圖片大小都是一致的,我可不想遊戲中人物形象忽大忽小搞的像變身似的~

下面來讓我們的怪物動起來!這一下子讓人聯想到Action,要知道我們的紋理圖冊其實就是一些連續的圖片。我們創建這麼一個動作,可以讓其有序的切換圖片,不就是在播放動作了嗎?

你可以這麼玩,當然假如你的朋友和你夠鐵的話….
和他視頻,然後狂按截屏,來個百來張,打開個存儲的文件夾,然後一張張切換看,不就是一個動畫嗎(除非他不動~)?這個和我們異曲同工。接下來是代碼。

//這樣創建一個動作 每隔0.1秒換一張紋理 當然我們傳入的是一個紋理數組,內部怎麼做不關心
let walkAnimation = SKAction.animateWithTextures(monsterWalkTextures, timePerFrame: 0.1)
//讓精靈動起來
monster.runAction(walkAnimation)

辦完正事紋理走開!

要知道圖形硬件將紋理加載到內存之後,是始終保存着的,直到SKTexture對象被刪除。所以在刪除的時候我們必須考慮很多,因爲那些對它具有強引用的對象都要受此(刪除)影響!具體包括:

  • 引用了該紋理的所有 SKSpriteNodeSKEffectNode 對象
  • 代碼中對該紋理具有強引用(strong references)關係的所有東東
  • SKTextureAtals對象自然也不用說 ,還不是包含了這個紋理的原因哈

結尾:
本節對紋理進一步瞭解,我認爲要對概念理解透徹,至於應用非常簡單,所以不用擔心。
接下來是對Action的展開討論!

發佈了75 篇原創文章 · 獲贊 70 · 訪問量 10萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章