cocos2d-x中關於字體的類主要有三種
CCLabelAtlas
CCLabelBMFont
CCLabelTTF
簡單介紹
CCLabelAtlas
繼承關係圖
介紹
上面說明了以下幾點:1、CCLabelAtlas 比CCLabel(CCLabelTTF)快很多
2、CCLabelAtlas 中的每個字符必須有固定的高度和寬度
3、CCLabelAtlas 可以做你想要的,前提是你提供給他一張你想操作的字體的圖片
4、CCLabelBMFont 比CCLabelAtlas 更靈活,他支持邊寬的字體
5、增加一點,要用CCLabelAtlas創建字體你必須給出圖片到字體的映射方式,也就是設置裏面startCharMap的參數值,每種字體的映射方式不一樣
CCLabelBMFont
繼承關係圖
介紹
繼續說明
1、 首先CCLabelBMFont是CCSpriteBatchNode的一個子類(這個很強大)
2、 他能夠把每一個字符當做一個CCSprite,這意味着每一個單獨的字符都可以有自己的動作(什麼旋轉,放大,改變透明度)
3、 所有內部字符的的定位點(anchorpoint)爲(0.5,0.5),也就是說每一個字符相對於座標點的位置爲該字符的中心點(而不是左上角,或則左下角),這裏說了建議不要去修改他,因爲這種改變可能會影響繪製
4、 CCLabelBMFont不僅具有CCLabel(CCLabelTTF)的靈活性,而且有CCLabelAtlas的速度和所有CCSprite的功能,如果你在考慮用CCLabelBMFont還是CCLabelAtlas時,那麼就用CCLabelBMFont吧
CCLabelTTF
繼承關係圖
介紹
說明
CCLabelTTF很慢,考慮用CCLabelAtlas和CCLabelBMFont來替代
字體的創建方式
和cocos2d-x中大多數類型一樣,字體也實現了靜態工廠的模式(通過靜態方法創建,採用CCPoolManager管理內存),當然你也可以採用非靜態方法來創建
CCLabelAtlas:
上面已經說了CCLabelAtlas創建的字體相對於你給的字體圖片來說必須有固定的寬度和高度,你還應該給出固定的映射方式(否則創建的字體達不到你的要的效果)
setString函數:
我們可以通過初始化的方式設置label顯示的字符串,如果你想改變label顯示的字符串,那麼你就需要用到setString函數
CCLabelAtlas:
CCLabelBMFont:
CCLabelTTF:
通過上面的源代碼我們能大概描述出其創建的方式
CCLabelAtlas:
1、將字符串清空
2、將設置的字符串賦值給先前清空的字符串
CCLabelBMFont:
1、將字符串清空
2、將設置的字符串賦值給先前清空的字符串
3、將每個節點設置爲隱藏(CCLabelBMFont 中對待每個字符是以CCNode的方式,因爲他是CCSpriteBathNode的派生類)
4、顯示新的字符(我們可以猜測這裏的createFontChars的功能就是將新的字符賦值到每個節點中,後將節點顯示出來)
CCLabelTTF
1、將字符串析構掉
2、重新new一個字符串
3、創建新的texture
4、將texture設置進去
從上面的setString函數調用開銷可以看出一般我們在需要頻繁改變顯示的字符串的時候我們最好是採用CCLabelAtlas,比如說顯示時鐘的時候,其次是CCLabelBMFont,最後是CCLabelTTF
具體的創建和使用上面三個類,我們可以通過Cocos2d-x中FontTest來進行測試
最後需要說明的是上面的這些類全都繼承自CCNode,CCNode有個接口函數runAction,也就是說我們可以將cocos2d-x中的所有動作和這些label結合起來顯示,而CCLabelBMFont是以CCNode的方式對待每個字符,那麼每個字符都可以創建出動作