Cocos2d-X中的字型,Cocos2d-X字型
Cocos2d-X中顯示文本的方式有下面三種:
CCLabelTTF: 使用系統字型,每個字串會產生一個紋理,顯示效率比較低下,適合不變化的文字
CCLabelAtlas: 使用NodeAtlas最佳化渲染,適合經常變化的數字,比如分數,金錢之類的數字
CCLabelBMFont: 使用CCSpriteBatchNode,很靈活,每個字元都是一個精靈,可以對每個字元進行操作,直接使用圖片,將文字畫在
設定文本的字型為CCLabelTTF
//在層上設定屬性bool Label::init(){ //初始化父類CCLayer CCLayer::init(); //設定視窗的尺寸 CCSize winSize = CCDirector::sharedDirector()->getWinSize(); //建立一個字型,並且以此為字型的文字 CCLabelTTF* label = CCLabelTTF::create("This is Text", "Arial", 25); addChild(label); //設定文字的位置 setPosition(ccp(winSize.width/2, winSize.height/2)); return true;}
代碼解析:
CCLabelTTF* label = CCLabelTTF::create("This is Text", "Arial", 25);
第一個參數:顯示的文本
第二個參數:文本的字型
第三個參數:文本的大小
執行結果:
遍曆所有的CCLabelTTF字型
在Label.h中添加下面的代碼
#ifndef __Label_H__#define __Label_H__#include "cocos2d.h"USING_NS_CC ;class Label : public CCLayer{public: bool init(); static CCScene* scene(); bool ccTouchBegan(CCTouch*,CCEvent); void ccTouchMoved(CCTouch*, CCEvent*); CREATE_FUNC(Label);};#endif
在Label.cpp中添加下面的代碼
<span style="color:#000000;">#include "Label.h"USING_NS_CC ;//包含所有的CCLabelTITF字型static const char* _font[] = {"AppleGothic","HiraKakuProN-W6","HiraKakuProN-W3","MarkerFelt-Thin","STHeitiK-Medium","STHeitiK-Light","TimesNewRomanPSMT","Helvetica-Oblique","Helvetica-BoldOblique","Helvetica","Helvetica-Bold","TimesNewRomanPS-BoldMT","TimesNewRomanPS-BoldItalicMT","TimesNewRomanPS-ItalicMT","Verdana-Bold","Verdana-BoldItalic","Verdana","Verdana-Italic","Georgia-Bold","Georgia","Georgia-BoldItalic","Georgia-Italic","ArialRoundedMTBold","TrebuchetMS-Italic","TrebuchetMS","Trebuchet-BoldItalic","TrebuchetMS-Bold","STHeitiTC-Light","STHeitiTC-Medium","GeezaPro-Bold","GeezaPro","Courier","Courier-BoldOblique","Courier-Oblique","Courier-Bold","ArialMT","Arial-BoldMT","Arial-BoldItalicMT","Arial-ItalicMT","STHeitiJ-Medium","STHeitiJ-Light","ArialHebrew","ArialHebrew-Bold","CourierNewPS-BoldMT","CourierNewPS-BoldItalicMT","CourierNewPSMT","Thonburi-Bold","AmericanTypewriter","AmericanTypewriter-Bold","STHeitiSC-Medium","STHeitiSC-Light","HelveticaNeue","HelveticaNeue","HelveticaNeue-Bold","Zapfino"};CCScene* Label::scene(){ //建立一個建立 CCScene *s = CCScene::create(); //建立一個層 CCLayer* layer = Label::create(); //將情境加到蹭上 s->addChild(layer); //返回情境 return s;}//在層上設定屬性bool Label::init(){ //初始化父類CCLayer CCLayer::init(); //設定視窗的尺寸 CCSize winSize = CCDirector::sharedDirector()->getWinSize(); int height = 0; //遍曆CCLabelTIF中的所有字型 for(int i = 0; i < sizeof(_font) / sizeof(*_font); i++) { //建立一個字型,並且以此為字型的文字 CCLabelTTF* label = CCLabelTTF::create(_font[i], _font[i], 25); //得到字型的寬度和高度 CCSize size = label->boundingBox().size; addChild(label); //設定文字的位置 label->setPosition(ccp(winSize.width / 2, height + size.height/2));height += size.height; } setTouchEnabled(true);setTouchMode(kCCTouchesOneByOne); return true;}bool Label::ccTouchBegan(CCTouch* touch,CCEvent){ return true;}void Label::ccTouchMoved(CCTouch* touch, CCEvent*){// 獲得觸摸移動的距CCPoint ptDelta = touch->getDelta(); // 只上下滑動的方法setPositionY(getPositionY() + ptDelta.y);}</span>
執行結果:
使用CCLabelAtlas顯示彩色的字型
首先需要一張png格式的圖片,並且將圖片放在Resource目錄中
然後添加下面的代碼
//在層上設定屬性bool LabelAtlas::init(){ //初始化父類CCLayer CCLayer::init(); //設定視窗的尺寸 CCSize winSize = CCDirector::sharedDirector()->getWinSize(); //建立一個Atlas字型 //第一個參數:顯示的內容 //第二個參數:圖片名 //第三個參數:圖片的寬度 //第四個參數:圖片的高度 //第五個參數:圖片中第一個字的ASCALL碼值 CCLabelAtlas* label = CCLabelAtlas::create("18937302", "labelatlasimg.png", 24, 32, '0'); addChild(label); //設定文字顯示的位置 label->setPosition(winSize.width/2, winSize.height/2); return true;}
執行結果:
在上面的代碼中添加下面的代碼實現修改文本
//改變顯示的數字 label->setString("87899");
執行結果:
使用CCLabelBMFont:顯示彩色的字
首先需要一張png格式的圖片,並且將圖片放在Resource目錄中
然後添加下面的代碼
//在層上設定屬性bool BMFont::init(){ //初始化父類CCLayer CCLayer::init(); //設定視窗的尺寸 CCSize winSize = CCDirector::sharedDirector()->getWinSize(); //設定文字顯示的位置 CCPoint ptCenter = ccp(winSize.width / 2, winSize.height / 2); //建立一個Atlas字型 //第一個參數:顯示的內容 //第二個參數:圖片檔案的描述檔案名稱 CCLabelBMFont* label = CCLabelBMFont::create("abc", "bitmapFontTest.fnt"); addChild(label); //設定文字顯示的位置 label->setPosition(ptCenter); return true;}
執行結果:
使用CCLabelBMFont實現旋轉字元
//在層上設定屬性bool BMFont::init(){ //初始化父類CCLayer CCLayer::init(); //設定視窗的尺寸 CCSize winSize = CCDirector::sharedDirector()->getWinSize(); //設定文字顯示的位置 CCPoint ptCenter = ccp(winSize.width / 2, winSize.height / 2); //建立一個Atlas字型 //第一個參數:顯示的內容 //第二個參數:圖片檔案的描述檔案名稱 CCLabelBMFont* label = CCLabelBMFont::create("abc", "bitmapFontTest.fnt"); addChild(label); //設定文字顯示的位置 label->setPosition(ptCenter); //將label中的字元輸入數組中 CCArray* arr = label->getChildren(); //選擇數組中的字元,objectAtIndex(0)表示選擇數組中的第0個字元 CCSprite* sprite = (CCSprite*)arr->objectAtIndex(0); //字元旋轉90度 sprite->setRotation(90); return true;}
執行結果:
使用CCLabelBMFont實現放大字元
//在層上設定屬性bool BMFont::init(){ //初始化父類CCLayer CCLayer::init(); //設定視窗的尺寸 CCSize winSize = CCDirector::sharedDirector()->getWinSize(); //設定文字顯示的位置 CCPoint ptCenter = ccp(winSize.width / 2, winSize.height / 2); //建立一個Atlas字型 //第一個參數:顯示的內容 //第二個參數:圖片檔案的描述檔案名稱 CCLabelBMFont* label = CCLabelBMFont::create("abc", "bitmapFontTest.fnt"); addChild(label); //設定文字顯示的位置 label->setPosition(ptCenter); //將label中的字元輸入數組中 CCArray* arr = label->getChildren(); //選擇數組中的字元,objectAtIndex(0)表示選擇數組中的第0個字元 CCSprite* sprite = (CCSprite*)arr->objectAtIndex(0); //字元放大2倍 sprite->setScale(2); return true;}
執行結果:
cocos2dx開發,CCLabelTTF在使用過程中,怎改變字型,我怎發現字型不可以改變,我主要是用來輸出數字
windows支援不是很好,在老一點的整合顯卡並不支援opengl1.5以上的版本,在手機上字型是有效果的,你可以自己弄個黑蘋果虛擬機器試一下
cocos2d-x 獲得文字寬度
getContentSize().width
getContentSize().height