cocos2d-x中關於字體的類主要有三種

轉載1:
在 cocos2d 中有三個類可以在層或精靈中添加文字:
  • CCLabelTTF
  • CCLabelBMFont
  • CCLabelAtlas

CCLabelTTF 每次調用 setString (即改變文字)的時候,一個新的OPENGL 紋理將會被創建.。這意味着setString 和創建一個新的標籤一樣慢。所以,當你需要頻繁的更新它們的時候,儘可能的不用去使用標籤對象。而應該使用CCLabelAtlas或者是CCLabelBMFont。

CCLableTTF

CCLabelTTF *label = [CCLabelTTF labelWithString:@"the string" 
                                fontName:@"Marker Felt" 
                                fontSize:21];
[layer addChild:label];
label.position = ......
// [label setString:@“change string”];

這個類使用的是系統中的字體,不需要額外往項目文件中添加字體文件。但如果你有自定義的字體也可以加到項目中,如果無法使用,可以查看一下ccConfig.h中的CC_FONT_LABEL_SUPPORT是否enable了。

解釋一下上面的參數,labelWithString 就是指生成的這個文字標籤的文字“the string”,你想寫什麼就可以些什麼, fontName就是字體名稱, fontSize是字體大小。

如果需要添加之後需要修改文字,可以使用 setString 方法。

CCLabelBMFont

CCLabelBMFont *label =[CCLabelBMFont labelWithString:@"the string" 
                                     fntFile:@"konqa32-hd.fnt"];
[layer addChild:label];
label.position = ......
// [label setString:@“change string”];

這個類使用之前,需要添加好字體文件,包括一個圖片文件 (**.png) 和一個 字體座標文件 (**.fnt)。在 cocos2d的示例項目中有現成的,可以先拿過來練習一下,找的時候注意兩個文件的名稱是相同的,只是擴展名不同。

解釋一下參數, labelWithString 同上面一樣,也是指定文字。 fntFile是文件名,寫擴展名是 .fnt的那個。下面是 .fnt文件的截圖

可以看到 .fnt 文件定義了 圖像文件的名稱,以及每個字符對應的位置信息。

這個沒辦法指定字體的字號,但可以用  scale  屬性進行縮放來調整大小。就當它是sprite。

CCLabelAtlas

CCLabelAtlas *label = [CCLabelAtlas labelWithString:@"the string" 
                                    charMapFile:@"fps_images.png" 
                                    itemWidth:12 
                                    itemHeight:18 
                                    startCharMap:'.'];
[layer addChild:label];
label.position = ......
// [label setString:@“change string”];

在項目文件中,在resourse group裏你可以找一下一個叫 fps_images.png的這個圖像文件,文件如下:

解釋一下參數,labelWithString就是字符, charMapFile 就是字符的圖像文件(這個只要圖像文件就可以了),itemWidth是每個字符的寬度,itemHeight是每個字符的高度,這個不能設錯,否則顯示的時候可能就不對了。 最後一個是你字體第一個字符的ASCII碼值,不過不用傳ASCII,而是對應的字符,


轉載2:

   CCLabelAtlas
   CCLabelBMFont
   CCLabelTTF
  
   簡單介紹
   CCLabelAtlas
   繼承關係圖
   cocos2d-x <wbr>中的字體
  介紹
  cocos2d-x <wbr>中的字體
上面說明了以下幾點:
1、CCLabelAtlas 比CCLabel(CCLabelTTF)快很多
2、CCLabelAtlas 中的每個字符必須有固定的高度和寬度
3、CCLabelAtlas 可以做你想要的,前提是你提供給他一張你想操作的字體的圖片
4、CCLabelBMFont 比CCLabelAtlas 更靈活,他支持的字體寬可以參數化
5、增加一點,要用CCLabelAtlas創建字體你必須給出圖片到字體的映射方式,也就是設置裏面startCharMap的參數值,每種字體的映射方式不一樣
  
CCLabelBMFont
繼承關係圖
cocos2d-x <wbr>中的字體
介紹
cocos2d-x <wbr>中的字體

繼續說明
1、 首先CCLabelBMFont是CCSpriteBatchNode的一個子類(這個很強大)
2、 他能夠把每一個字符當做一個CCSprite,這意味着每一個單獨的字符都可以有自己的動作(什麼旋轉,放大,改變透明度)
3、 所有內部字符的的定位點(anchorpoint)爲(0.5,0.5),也就是說每一個字符相對於座標點的位置爲該字符的中心點(而不是左上角,或則左下角),這裏說了建議不要去修改他,因爲這種改變可能會影響繪製
4、 CCLabelBMFont不僅具有CCLabel(CCLabelTTF)的靈活性,而且有CCLabelAtlas的速度和所有CCSprite的功能,如果你在考慮用CCLabelBMFont還是CCLabelAtlas時,那麼就用CCLabelBMFont吧


CCLabelTTF
繼承關係圖
cocos2d-x <wbr>中的字體

介紹
cocos2d-x <wbr>中的字體
說明
CCLabelTTF很慢,考慮用CCLabelAtlas和CCLabelBMFont來替代


字體的創建方式
和cocos2d-x中大多數類型一樣,字體也實現了靜態工廠的模式(通過靜態方法創建,採用CCPoolManager管理內存),當然你也可以採用非靜態方法來創建
CCLabelAtlas:
cocos2d-x <wbr>中的字體

上面已經說了CCLabelAtlas創建的字體相對於你給的字體圖片來說必須有固定的寬度和高度,你還應該給出固定的映射方式(否則創建的字體達不到你的要的效果)

setString函數:
我們可以通過初始化的方式設置label顯示的字符串,如果你想改變label顯示的字符串,那麼你就需要用到setString函數
   CCLabelAtlas:
cocos2d-x <wbr>中的字體

     CCLabelBMFont:
 cocos2d-x <wbr>中的字體
   CCLabelTTF:
cocos2d-x <wbr>中的字體
 通過上面的源代碼我們能大概描述出其創建的方式
 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的方式對待每個字符,那麼每個字符都可以創建出動作

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