OT源代碼的分析,OrtHello 遲早攻破你 (五)OTContainer相關

OTContainers 可以看成是一個Texture管理器,每一個管理一張圖片, 其實可以看成是spritesheet

OTContainers裏面可以放入的內容有:OTSpriteSheet,

Atlas(包括SpriteAtlas-Base,SpriteAtlas-Cocos2D,SpriteAtlas-OGRE,SpriteAtlas-Sparrow)

最實用的可能是SpriteAtlas-Cocos2D導出的Texture和xml文件的方法。


其實前面4章講的都是一些比較空泛又底層的東西,從這一章開始實用性會大大增加

我們打開orthello的第3個例子,可以看的比較清楚了,首先我們看到這個Containers其實是從預設的SpriteSheet裏面拖拽過來的,其實在創建的時候也可以用代碼,但是個人覺得如果是SpriteSheet的話既然遊戲要用到,不如就先加載進來,

再看看一個Containers  具體來講下面是一個最基本的SpriteSheet

下面講的是重點,Frames XY 是控制整個Texture的切分程度,具體來說就是決定橫向切多少個小方塊,縱向切多少個小方塊

方塊的大小不能由程序控制,而是由切分的比例和整個Texture控制

有一個重點就是:每一個spritesheet是有相同大小的frame!


SheetSize是說整個Sheet在Texture中的大小,如果設0,0則表示整個Texture都是,如果設置了一個X和Y,那麼則從Texture的左上角開始,X和Y確定的大小來作爲一個真實的Texture,不得不說這種方法比較不好用。原文:If we have some empty space to the right or bottom of this texture we can specify the original SheetSize in pixels ( always in combination with the original FrameSize in pixels ) so texture scaling and offsetting for the frames can be calculated.


FrameSize是說整個Frame在每一個被切分的sheet 中的大小,如果設0,0則表示整個Frame都是,假設每一個Frame是40*40,

但是你的FrameSize設了10,10則這個真實的frame只用到了40*40裏面的10*10,它會剔除掉其他部分-_- 其實這樣做有個壞處就是不規則的圖形的話不好排列

原文:If we have some empty space to the right or bottom of this texture  we can specify the original FrameSize in pixels ( always in combination  with the original SheetSize in pixels ) so texture scaling and  offsetting for the frames can be calculated.


還好有一個用xml導入cocos2d的資源的方法,這個xml相當於plist文件,好吧這個和spritesheet的方法類似,只不過要導入一個xml文件


Texture 就是選擇的圖片了


隨便點一個OTAnimation

可以看到裏面的StartFrame 和 EndFrame 就是來設置一個動作的,Fps是運行的速率,其實單單設置Duration就好了


好吧,我們繼續研究OTContainer,它裏面一個重要的屬性Frame,看看是怎麼構成的

public struct Frame
    {
        public string name;
        public Vector2 size;      /// This frame's image scale modifier
        public Vector2 imageSize;  /// This frame's original image size
        public Vector2 offset;    /// This frame's world position offset modifier
        public float rotation;           /// This frame's world rotation modifier
        public Vector2[] uv;   /// Texture UV coordinates (x/y).
        public Vector3[] vertices;  /// Mesh vertices used when OffsetSizing = false (Atlas)
    }


    public bool isReady  //判斷是否準備好,只有當Frame大於0時才返回true

    public Frame GetFrame(int index) 

    public int frameCount

    public virtual int GetFrameIndex(string inName)


OTSpriteSheet 繼承了OTContainer,方法也大同小異

OTSpriteAtlas 也類似,多了一個offsetSizing 的屬性,如果爲否,則沒有位置偏移和尺寸偏移,一般來說不會設置成否

OTSpriteAtlasCocos2D - - 就多了一個Atlas Data File的用來導入XML文件。

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