【spine】原理介紹和程序實現

  突然間,微博上被@了,一看原來是之前的關於介紹 spine 的文章引起的。然後就是一陣慚愧,又開了一坑,然後就木有了。雖然,一直在研究 spine,但是的確沒寫下來相關的內容。於是,趕緊,補了一些內容。


  官網內容轉發,沒啥技術含量。我自己寫的運行庫也完成了,雖然還需要打磨,但是比官方的更符合2dx 的風格。做了許久之後,對 spine 的理解更深了一點,然後就胡亂介紹下設計思路和爲什麼這麼做。


概念


先來介紹下 spine 中的一些術語和概念


  • Bone 骨骼

spine 是骨骼編輯器,所以骨骼是基礎。每個骨骼都會有旋轉,縮放,位移的屬性。然後骨骼可以有子節點,最終形成了一個樹型結構。可以對應2dx 裏面的 node


  • Slot 插槽

骨骼上的一個掛載點。不是所有的骨骼上都能放置東西的,因爲很多骨骼其實只參與計算,真正重要的骨骼,也就是需要掛載其他東西的骨骼上必須放置插槽。slot 只是用來標記特殊的骨骼位置,本身只有一個顏色屬性,也可以說,重要的骨骼節點可以稱爲 slot。


  • Attachment 附件

掛在插槽上的內容,可以是圖片,也可以是判定區域,只要是你能想到的東西,都可以當成附件。


  • Draw order 描畫順序

骨架上插槽的一個順序列表。用來控制描畫的先後順序。


  • Animation 動畫

基於時間軸的一個骨骼狀態列表。


  • Skin 皮膚

一套附件的集合,類似於換裝。


  • Bounding Box 邊界框

用來指定骨骼上的邊界的多邊形的區域。


  • atlas 圖集

貼圖集合,小圖片合併在一起,就成了圖集。




實現


上面大致介紹了一些基本概念,然後我們從實現角度上來說下爲啥這麼設計。


首先,假設我們需要一個骨骼系統。很酷,是的,最近的確比較火。於是,我們就設計了一個樹狀的骨架,每個節點就是(Bone)。


很簡單啊,再想下,骨骼上要放圖片啥的,於是我們就要能訪問到特定的骨骼,遍歷太傻了,好吧,我們給這些骨骼加個名字,這樣就能訪問到具體 骨骼了,那這些名字就叫 slot。


好吧,可能有些人覺得,slot 和 bone 本質上一樣,爲啥需要分開呢,沒必要的。我只能說事情其實並不簡單,來想下,我們已經有了一個完美的骨架,圖片也在應該在的骨骼上了。那我們該如何顯示圖片麼?遍歷麼,從根結點開始,一直到最下層的節點,不管你用啥排序,這個順序是固定的,但是現實總是很殘酷,很多時候,我們需要不停調整圖片描畫的順序,也就是調整樹的節點排序,啊,好麻煩。那怎麼辦,我們指定下骨骼描畫的順序吧(Draw order),這些特定的骨骼也就是 slot。


你看,這下完美了,也就是 bone 用來計算位置,slot 用來控制描畫。


完美的骨骼系統,一定要有碰撞區域(bounding box),這和圖片差不多,一個用於顯示,一個用於邊界判斷,好吧,那就抽象成一個概念叫(attachment),於是,slot 上就可以附加不同的 attachment 了。


終於可以換附件了,但是一個一個換好累。於是,我們把一組附件合在一起,組成了 skin。這下簡單了,一換 skin,整個世界就變樣了。


啊,做着做着,就發現圖片太多了,要優化啊。怎麼辦,簡單,把小圖片合在一起,每個圖片對應了一個大圖裏面的一個區域,這就是 atlas。


啊,不早了,先說到這裏吧,下次有空繼續。

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