瘋狂ios之cocos2d中的文本

在遊戲當中常常須要添加標籤和文本對此cocos2d提供了強大的文本渲染功能。cocos2d支持全部內置的iOS字體以及一些TrueType字體。瀏覽器

cocos2d中文本渲染功能一般由兩個類實現CCLabelTTFCCLabelBMFont。下面咱們來詳細說明這兩個類在實際項目當中如何使用。編輯器

13.12.1CCLabelTTF

CCLabelTTF類繼承自CCSprite由於其渲染速度相對較慢因此一般用於顯示一些靜態的標籤和純文本。CCLabelTTF類的經常使用方法以下。ide

+(id)labelWithString:(NSString*)string fontName:(NSString*)name fontSize:(CGFloat)size該方法根據字體名稱和字體大小初始化一個新的標籤對象CCLabelTTF對象將使用CCTexture2D類從文本建立一個紋理圖。工具

-(id)initWithString:(NSString*)string fontName:(NSString*)name fontSize:(CGFloat)size該方法根據字體名稱和字體大小初始化一個新的標籤對象CCLabelTTF對象將使用CCTexture2D類從文本建立一個紋理圖。該方法與前一個方法功能大體類似只不過該方法是實例方法須要用CCLabelTTF對象調用。學習

-(void) setString:(NSString*)str該方法設置CCLabelTTF對象的文本內容。字體

接下來咱們經過示例演示在項目中如何使用CCLabelTTF類。實現代碼以下。ui

程序清單codes/13/13.12/LabelTTFTest/LabelTTFTest/HelloWorldLayer.mspa

-(id) init.net

{code

if( (self=[super init]) ) {

CGSize winSize = [[CCDirector sharedDirector] winSize];

// 使用特定的文本內容、字體名稱和字體大小3個參數建立並初始化一個新的標籤對象

CCLabelTTF *label = [CCLabelTTF labelWithString:@"Hello World"

fontName:@"Marker Felt" fontSize:64];

label.position = ccp(winSize.width/2,winSize.height/2);

[self addChild:label];

// iOS支持的全部字體

NSArray *fontFamilyNames = [UIFont familyNames];

for (NSString *familyName in fontFamilyNames) {

NSArray *names = [UIFont fontNamesForFamilyName:familyName];

CCLOG(@"%@ = %@",familyName,names);

}

}

return self;

}

單擊「Run」按鈕執行LabelTTFTest項目模擬器屏幕正中顯示HelloWorld標籤控制檯輸出如圖13.50所示。

091416_XWdn_262659.jpg

上面代碼首先使用特定的文本內容、字體名稱和字體大小3個參數建立並初始化了一個新的標籤對象而後設置了標籤在屏幕中的位置並添加爲當前層的子節點最後從UIFont類中查詢出iOS中的全部可用字體並打印在控制檯中。

13.12.2CCLabelBMFont

使用CCLabelTTF類顯示靜態的標籤文本很方便可是渲染速度相對較慢而且缺少靈活性爲此cocos2d提供了CCLabelAtlas類和CCLabelBMFont類來替代CCLabelTTF類。因爲CCLabelAtlas類相對於CCLabelBMFont類來講過於複雜因此在實際開發中一般建議使用CCLabelBMFont類。CCLabelBMFont類和CCLabelTTF類的區別以下。

CCLabelBMFont類的渲染速度要比CCLabelTTF類快不少。

CCLabelBMFont類來自於圖片文件而且有不少第三方編輯器支持很是靈活。

CCLabelBMFont類支持不一樣寬度的字符。

因此若是在項目開發中只是須要使用標準的iOS字體而且不須要常常修改標籤的文本內容那麼使用CCLabelTTF類就能夠知足。但有些時候若是須要使用定製的字體並且須要每一幀都更改文本的內容這時就建議使用CCLabelBMFont類。

CCLabelBMFont類繼承自CCSpriteBatchNode並實現了CCLabelProtocolCCRGBAProtocol兩個協議。由於繼承自CCSpriteBatchNode因此文本中的每個字符會被做爲一個獨立的CCSprite精靈對象看待每一個字符的大小、着色、透明度和旋轉角度等屬性均可以被修改。CCLabelBMFont類還能夠被看成菜單項的一部分。CCLabelBMFont類有以下兩個特有的屬性。

opacity透明度變量類型是Glubyte

color顏色變量類型是ccColor3B使用RGB數值表示的色彩。

那麼CCLabelBMFont類如何使用呢由於CCLabelBMFont類繼承自CCSpriteBatchNode而且來自於圖片文件因此其實它的做用就至關於精靈表單而其中的每個字符則至關於精靈表單中的單個精靈對象。字符是以圖片形式存儲的所以必須使用字體圖集。字體圖集其實就是一張大的圖片其中包含了全部要顯示的字符以及描述字符在字體圖集中位置的座標數據字體圖集能夠理解成前面學習過的精靈表單。當字符是以圖片形式存儲時也沒法直接修改它的大小若是在遊戲當中須要使用多種大小不一樣的字符咱們必須爲每一種大小建立一個單獨的字體圖集。

cocos2d中使用FNT文件保存位圖字體cocos2d自己並無提供建立字體圖集的工具可是有不少第三方工具能夠建立字體圖集。cocos2d官方推薦如下幾種建立字體圖集的工具。

q Glyph Designer該軟件爲收費的商業軟件下載地址爲http://glyphdesigner. 71squared.com

q Slick2D Hiero Bitmap Font Generator該軟件爲Java開發的免費軟件下載地址爲http://slick.cokeandcode.com/demos/hiero.jnlp

q Hiero該軟件爲Java開發的免費軟件使用簡單下載地址爲http://www.n4te.com/ hiero/hiero.jnlp

本書使用Hiero軟件建立字體圖集它的做用相似於前面建立紋理圖集的Zwoptex

1. 下載Hiero工具

打開瀏覽器在地址欄輸入http://www.n4te.com/hiero/hiero.jnlp下載Hiero工具。

091523_pUeT_262659.jpg


打開Hiero後主界面顯示如圖13.51所示。

091548_UBrz_262659.jpg

2. 建立字體圖集

在主界面左上方「Font」字體列表框中選擇字體如「Arial Rounded MT Bold」。選擇後上方中間位置的「Sample Text」列表框中會顯示相對應的字體樣本。

在上方右側的「Effects」列表框中能夠設置顏色、輪廓、陰影等。

在下方的「Rendering」區域切換到「Glyph cache」將「Page width」和「Page height」設置爲256使用最小的2的次方的圖像包含全部須要的文本字符。Hiero將建立一個256*256的字體圖集如圖13.52所示。

091655_es7I_262659.jpg

單擊左上角的「File」選擇「Save BMFont files」將文件命名爲「my.fnt」。Hiero將同時建立一個FNT文件和一個PNG文件FNT文件就相似於使用Zwoptex建立的plist文件。

以上就是使用Hiero製做字體圖集的具體方法。接下來將演示如何使用CCLabelBMFont類在遊戲開發中使用字體圖集。

3. 字體圖集示例

首先建立一個LabelBMFontTest項目選擇「Resources」組並單擊右鍵選擇「Add Files toLabelBMFontTest’」將剛纔生成的my.fntmy.png添加到Resoures組當中。接下來在init方法裏面添加一段代碼使用LabelBMFontTest操做字體圖集。實現代碼以下。

程序清單codes/13/13.12/LabelBMFontTest/LabelBMFontTest/HelloWorldLayer.m

-(id) init

{

if( (self=[super init]) ) {

CGSize winSize = [[CCDirector sharedDirector] winSize];

// 建立一個標籤使用my.fnt字體圖集

CCLabelBMFont *label = [CCLabelBMFont

labelWithString:@"Hello BMFont" fntFile:@"my.fnt"];

label.position = ccp(winSize.width/2,winSize.height/2);

[self addChild:label];

// CCScaleBy動做2秒後放大2

id scaleBy = [CCScaleBy actionWithDuration:2.0f scale:2];

[label runAction:scaleBy];

}

return self;

}

單擊「Run」按鈕執行LabelBMFontTest項目模擬器顯示如圖13.53所示。

091810_VuiF_262659.jpg

上面代碼首先用CCLabelBMFont的類方法建立了一個標籤並使用了剛剛在Hiero中生成的my.fnt字體圖集而後將標籤設置在屏幕正中。接下來讓標籤執行一個動做2秒以後放大到原來的2倍。經過觀察發現標籤放大後字體邊緣會出現鋸齒爲何會出現這種現象呢由於CCLabelBMFont是紋理圖紋理圖相似於位圖位圖在放大時會出現模糊或者失真現象。因此在開發中使用CCLabelBMFont時不要把縮放比例設置得過大若是字體標籤須要縮放對於不一樣大小的字符須要設置不一樣的字體圖集。

相關文章
相關標籤/搜索