1.一些概念
ttf:true type font 它是用曲線方式描述字體輪廓,因此都可以輸出很高質(zhì)量的字形,即放大縮小看起也很清晰
bitmap font : 點(diǎn)陣字體 位圖字體
atlas:詞典意思是地圖集, 我想它是用來表示多個(gè)圖片拼在一起的感覺,
2.cocostudio中控件中相應(yīng)的字體
Button:要求ttf格式字體,如果需要顯示文字的話
AtlasLabel:要求一張0-9拼在一起的圖片,比如顯示數(shù)字1,則把圖片對應(yīng)部分取出來顯示,數(shù)字本身相當(dāng)于圖片中的一個(gè)索引,不需要額外的映射關(guān)系文件,只要一張圖片,并指明每個(gè)字符的寬高即可
BitmapLabel:需要一個(gè)字符對應(yīng)到圖片位置的表即 fnt文件,fnt文件里面包含了引用到圖片的信息,各種顯示參數(shù)等
3.fnt格式簡述
fnt相當(dāng)于一個(gè)配置文件,比如漢字“象”要用bitmap的方式顯示。
象的unicode編碼是8c61,轉(zhuǎn)換為10進(jìn)制為35937,再通過fnt文件找到id=35937的顯示區(qū)域,最后把fnt對應(yīng)圖片相應(yīng)區(qū)域扣出來顯示
4.CCLabelTTF、CCLabelAtlas和CCLabelBMFont
1. CCLabelTTF
CCLabelTTF::labelWithString(const char *label, //文字內(nèi)容
const CCSize& dimensions, //范圍 CCSize(0,0)默認(rèn)大小
CCTextAlignment alignment, //對齊方式 0左 1中 2右
const char *fontName, //字體名
float fontSize //字號(hào))
CCLabelTTF是CCTextureNode的子類,通過系統(tǒng)字體生成label。
CCLabelTTF對象渲染比較慢,每次調(diào)用setString的時(shí)候,一個(gè)新的OpenGL紋理將被創(chuàng)建,這意味著setString和創(chuàng)建一個(gè)新的標(biāo)簽一樣慢,所以當(dāng)需要頻繁更新label的時(shí)候,應(yīng)該選擇另外兩種文字類。
由于CCLabelTTF這個(gè)類使用的是系統(tǒng)中的字體,不需要額外往項(xiàng)目文件中添加字體文件。但如果你有自定義的字體也可以加到項(xiàng)目中,如果無法使用,可以查看一下ccConfig.h中的CC_FONT_LABEL_SUPPORT是否enable了。
2. CCLabelAtlas
CCLabelAtlas::labelWithString(const char *label, //標(biāo)簽文字內(nèi)容
const char *charMapFile, //圖片路徑
unsigned int itemWidth, //元素的寬度
int unsigned itemHeight, //高度
unsigned char startCharMap //起始的字符)
引擎模板里面左下角顯示幀率的數(shù)字,就是利用CCLabelAtlas來實(shí)現(xiàn)的。因?yàn)閹室恢痹谧儭?br/>每個(gè)字符的高度和寬度不能設(shè)置錯(cuò)誤,否則顯示的時(shí)候可能就不對了。最后一個(gè)起始的字符用來對應(yīng)字符和圖像的關(guān)系的。
3. CCLabelBMFont
CCLabelBMFont::labelWithString(const char *str,
const char *fntFile)
它是CCSpriteSheet的一個(gè)子類,對每一個(gè)字符就像一個(gè)CCSprite來對待,因此每個(gè)單獨(dú)的字符可以進(jìn)行旋轉(zhuǎn)、縮放、設(shè)置透明等操作。
所有字符都是使用anchorPoint(0.5, 0.5),所以最好不要更改它,會(huì)影響渲染。
使用該類之前,需要添加好字體文件,包括一個(gè)圖片文件(AA.png)和一個(gè)字體坐標(biāo)文件(AA.fnt)。兩個(gè)文件的名稱相同,只是擴(kuò)展名不同。
cocos2dx的ttf字體顯示
方法:
一.在info.plist上面添加Fonts provided by application 如下圖,然后下面添加對應(yīng)的字體:
ps:以下非常重要!
1.字體不要添加文件夾路徑。。。。。直接字體文件名包括擴(kuò)展名就行了,
例如字體在Resource/fonts/DPCarved.ttf,不要寫fonts/DPCarved.ttf,按照我上面就行了
2.注意到我上面標(biāo)紅了的文字嗎:Fonts provided by application 這里是有s的,網(wǎng)上面一堆不負(fù)責(zé)的文章圖片中有s,文章字里面就Font provided by application,坑死啦,程序員應(yīng)該知道一個(gè)字母或者大小寫的差別吧?
仔細(xì)再截圖說明一下
這個(gè)info.plist 中如果是Fonts provided by application,其文本是如下:
看到吧,文本中并不是顯示Fonts provided by application的!
而info.plist 中如果是Font provided by application,其文本是如下:
看到差別了吧。。。。
二.代碼中應(yīng)用
CCLabelTTF *label = CCLabelTTF::create("中文exp:+1234567", "DPCarved", 40);
則可
這里重點(diǎn)要說一下第二個(gè)參數(shù)這個(gè)font family的名稱(上面標(biāo)紅的參數(shù)):
舉例說上面的微軟雅黑.ttf
很多人說mac中字體工具就能看到這個(gè)值,如下圖:
其實(shí)這是錯(cuò)的!。
CCLabelTTF *label = CCLabelTTF::create("中文exp:+1234567", "微軟雅黑", 40);//這是顯示不出來的
事實(shí)上需要這樣才能顯示出來:
CCLabelTTF *label = CCLabelTTF::create("中文exp:+1234567", "Microsoft Yahei", 40);
至于如何找這個(gè)font family出來。。。暫時(shí)我也沒什么好方法。。。比較笨的只知道GlyphDesigner這個(gè)程序能找到字體的font-family,如下圖
cocos2dx 3.0 TTF中文字體的使用說明
Q: 在cocostudio中顯示TTF中文字體的方法
A:引入的TTF文件要求字體內(nèi)部名和文件名都相同,可以使用Font Creator 軟件打開TTF文件,選擇Format菜單下的Name命令查看并修改,吃不準(zhǔn)的話就把所有的中文都改成和英語,最后記得把文件名也改成一樣的,這樣cocostudio才能正確讀取
Q: VS中中文硬編碼顯示亂碼的問題
A:label->setText("李四"); 比如這樣,默認(rèn)肯定是會(huì)顯示亂碼的,必須把文件設(shè)置為UTF8格式保存。在VS的文件-》高級(jí)保存設(shè)置 中,選擇編碼為 UTF8-無簽名 ,就能正確顯示
Q:3.0中UILable 控件改名問題
A: 3.0里面UILable變成了 Text,而不是Label