1. 程式人生 > >cocos2d中的新增文字的三種方式

cocos2d中的新增文字的三種方式

在 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檔案的截圖

cocos2d .fnt file screen shot

可以看到 .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”];

如果你用cocos2d專案模板建立過專案,那麼你已經看過它的效果了,就是左下角顯示幀率的數字。因為幀率一直在變,使用CCLabelTTF的話效率太低,因為只是數字所以也犯不上使用 CCLabelBMFont 載入那麼大的文字影象,所以使用這個比較合適。

在專案檔案中,在resourse group裡你可以找一下一個叫 fps_images.png的這個影象檔案,檔案如下:

cocos2d fps image

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

解釋一下引數,labelWithString就是字元, charMapFile 就是字元的影象檔案(這個只要影象檔案就可以了),itemWidth是每個字元的寬度,itemHeight是每個字元的高度,這個不能設錯,否則顯示的時候可能就不對了。 最後一個是起始字元,它是使用這個其實字元來對應字元和影象關係的。