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是每個字符的高度,這個不能設錯,否則顯示的時候可能就不對了。
最後一個是起始字符,它是使用這個其實字符來對應字符和圖像關係的。