【嘮叨】
在3.x中,廢棄了2.x裏的LabelTTF、LabelAtlas、LabelBMFont三個字體類,取而代之的是全新的字體標籤Label。
實際上Label是將三個字體類進行了融合,進行統一的管理與渲染,這使得創建字體標籤Label的方式更加統一,更加方便。
本節來學習一下3.x中新的標籤類Label,如果對2.x中的三個字體類不瞭解的話,建議先去看看那三個類的用法,再來學習本節內容,能夠更好的理解。
【本節內容】
在3.x中,Label支持四種方式的標籤創建。並新增了陰影Shadow、輪廓Outline、發光Glow效果的支持。還支持文字內容的行間距、文字間距、自動換行的設置。
> 創建系統原生字體API : createWithSystemFont
> 創建TTF : createWithTTF (原LabelTTF)
> 創建CharMap : createWithCharMap (原LabelAtlas)
> 創建BMFont : createWithBMFont (原LabelBMFont)
> Label的屬性與方法
> 文字效果渲染 : Shadow、Outline、Glow
> 對齊方式 : TextHAlignment、TextVAlignment
> Label的尺寸大小
> 自動換行
> 行間距、文字間距
> 單獨設置某個字符
關於圖片資源,請在cocos2dx給出的官方樣例cpp-tests中尋找。
【createWithSystemFont】
創建系統原生字體的API。
創建方式如下:
使用舉例:
【createWithTTF】
創建TTF的方式有以下兩種:
> 方式一:與2.x中LabelTTF的創建類似,不過使用的fontFile必須爲字體文件。
> 方式二:通過TTF的配置信息數據結構TTFConfig來創建。
1、方式一:與System Font創建類似
注:區別在於fontFile必須爲字體文件(如”*.ttf”),即不支持使用系統字體名稱來創建。
2、方式二:通過TTFConfig配置來創建
2.1、TTFConfig配置
2.2、使用TTFConfig創建TTF
使用舉例:
【createWithCharMap】
CharMap的用法與2.x中的LabelAtlas是一樣的,一般用來顯示數字。不過它也可以用來顯示其他字符,如英文字符。
字體文件資源一般來自一張.png圖片,或.plist文件。
注:圖片中每個字符的大小必須是固定的,若要改變字體大小,只能通過setScale放縮來實現。
創建CharMap有三種方式:
> 使用.png圖片創建
> 使用紋理Texture2D創建
> 使用.plist創建
從圖片中從左到右,一塊一塊截取。從字符startCharMap開始一一對應。
第一塊小圖片對應字符startCharMap;第二塊小圖片對應字符startCharMap+1;第三塊對應startCharMap+2 …… 以此類推。
注:startCharMap爲ASCII碼,即:數字 ‘0’ 爲48。
0、字符圖片資源
digit.png:200*20(每個數字20*20)。
1、使用.png創建
2、使用Texture2D創建
使用方法實際上與.png是類似的。
3、使用.plist創建
在digit.plist裏需要配置:用到的字符圖片資源.png,每個字符的寬、高,起始字符。
如下所示:
使用plist創建CharMap的方法:
【createWithBMFont】
BMFont的用法與2.x中的LabelBMFont是一樣的。
這個類使用之前,需要添加好字體文件,包括一個圖片文件(*.png)和一個字體座標文件(*.fnt),這兩個文件名稱必須一樣。可以下載一個fnt編輯工具來自定義字體。
值得注意的是:
> 在2.x中,可以使用 getChildByTag(i) 來獲取第i個字符,對其單獨設置屬性、動作等。
> 在3.x中,則是使用 getLetter(i) ,而不再是 getChildByTag(i) 。
這個類也沒辦法指定字體的字號大小,需要用setScale來縮放調整大小。
使用舉例:
【Label的屬性與方法】
Label繼承於:
> SpriteBatchNode : 用於加快字體的渲染速度。
> LabelProtocol : 用於設置Label的字符串內容。
主要函數如下:
【文字渲染效果】
支持三種渲染效果:
> Shadow : 陰影
> Outline : 輪廓,僅支持TTF
> Glow : 發光,僅支持TTF
注:其中Outline與Glow兩個效果,只會作用一個。即無法一起使用。
使用舉例:
如圖所示:
【對齊方式】
> TextHAlignment : 水平對齊方式
– TextHAlignmentEFT : 左對齊
– TextHAlignment:CENTER : 居中對齊,默認
– TextHAlignment:RIGHT : 右對齊
> TextVAlignment : 垂直對齊方式
– TextVAlignment::TOP : 頂部,默認
– TextVAlignment::CENTER : 中心
– TextVAlignment::BOTTOM : 底部
僅在設置了Label的尺寸大小setDimensions(width,height),大於顯示的字符串內容的尺寸大小,纔會起作用。
對齊方式舉例,如下幾張圖片所示:
對齊方式爲:
> TextHAlignmentEFT
> TextVAlignment::TOP
【自動換行】
在3.x中,自動換行有兩種方式。(當然你也可以使用C++裏的轉移字符’n’進行手動換行)
> 利用lb->setLineBreakWithoutSpace(true),來支持自動換行功能。
> 1. 利用 setMaxLineWidth(maxLineWidth),來控制自動換行。
> 2. 利用 setDimensions(width , height),來控制自動換行。
1、利用setMaxLineWidth
設置每行顯示文字的最大寬度。
注:這種方法僅在Label width == 0的情況下,纔會有效。
使用方法:
如圖:
2、利用setDimensions
使用方法:
如圖:
【文字間距】
間距的調整,是在 v3.2 之後纔出現的。可以設置文本內容的行間距與文字間距。
注:不支持System Font。
> setLineHeight : 設置行間距
> setAdditionalKerning : 設置額外文字間距
使用舉例:
圖解:
【單獨設置某個字符】
學過2.x中的LabelBMFont的同學,應該知道這個是怎麼回事吧?
在3.x中,使用TTF、CharMap、BMFont創建的文字標籤,其字符串內容的每個字符都是一個Sprite精靈圖片,可以對其進行單獨的設置。如精靈放縮、執行動作等。
注:不支持System Font。
> lb->getStringLength() : 獲取字符串內容的總長度
> lb->getLetter(i) : 獲取第i個位置上的字符
使用舉例:
|
cocos2dx3.2技術之新字體標籤Label淺析
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.