cocos2d 中添加顯示文字的三種方式(CCLabelTTF 、CCLabelBMFont 和CCLabelAtlas)比較

http://www.cnblogs.com/xuling/archive/2012/02/29/2372721.html

cocos2d 中添加顯示文字的三種方式(CCLabelTTF 、CCLabelBMFont 和CCLabelAtlas)

     最近在逛論壇的時候看到有的帖子說顯示文本時用 CCLabelTTF 不是很好,且推薦遊戲中最好別用。於是網上查了查相關資料,整理了下 ,順便也分享下

     在 cocos2d 中有三個類可以在層或精靈中添加文字:

  • CCLabelTTF
  • CCLabelBMFont
  • CCLabelAtlas

     CCLabelTTF

           CCLabelTTF 每次調用 setString (即改變文字)的時候,一個新的OPENGL 紋理將會被創建.。這意味着setString 和創建一個新的標籤一樣慢。

           所以,當你需要頻繁的更新它們的時候,儘可能的不用去使用標籤對象。  而應該使用CCLabelAtlas或者是CCLabelBMFont。

           OK, 看下它的使用方法

           CCLabelTTF *label = [CCLabelTTF labelWithString:@"the string"  fontName:@"Marker Felt"  fontSize:21];

           [layer addChild:label];

           label.position = ccp(100,100);

           [label setString:@“change string”]; //修改文字的方法


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

 

     CCLabelBMFont

CCLabelBMFont  相當於每次改變只改變了圖片座標,而CCLabelTTF要重新渲染.這個類使用之前,需要添加好字體文件,包括一個圖片文件 (**.png) 和一個 字體座標文件 (**.fnt)。

         在 cocos2d的示例項目中有現成的,可以先拿過來練習一下,找的時候注意兩個文件的 名稱是相同的,只是擴展名不同。

         CCLabelBMFont *label =[CCLabelBMFont labelWithString:@"the string"   fntFile:@"konqa32-hd.fnt"];

           [layer addChild:label];

           label.position = ccp(100,100);

           [label setString:@“change string”];

        fntFile是文件名,寫擴展名是 .fnt的那個。下面是 .fnt文件的截圖

        

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

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

 

   CCLabelAtlas        

        如果你用cocos2d項目模板創建過項目,那麼你已經看過它的效果了,就是左下角顯示幀率的數字。

        因爲幀率一直在變,使用CCLabelTTF的話效率太低,因爲只是數字所以也犯不上使用 CCLabelBMFont 加載那麼大的文字圖像,所以使用這個比較合適。

        CCLabelAtlas *label = [CCLabelAtlas labelWithString:@"12" charMapFile:@"fps_images.png" itemWidth:12 itemHeight:18 startCharMap:'.'];

          [layer addChild:label];

          label.position = ccp(100,100);

          [label setString:@“34”];

 

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

        

       所以,這個只能顯示上面這個12個字符,abcd什麼的就不行了。

       解釋一下參數,

       labelWithString就是字符,

       charMapFile 就是字符的圖像文件(這個只要圖像文件就可以了),

       itemWidth是每個字符的寬度,

       itemHeight是每個字符的高度,這個不能設錯,否則顯示的時候可能就不對了。

       最後一個是起始字符,它是使用這個其實字符來對應字符和圖像關係的。


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