原文地址:http://shahdza.blog.51cto.com/2410787/1560612
1
2
3
4
5
6
7
8
9
10
|
// static Label* createWithSystemFont( const std::string& text, //字符串內容 const std::string& font, //字體(字體名稱、或字體文件) float fontSize, //字號 const Size& dimensions = Size::ZERO, //label的尺寸大小,默認不設置尺寸 TextHAlignment hAlignment = TextHAlignment::LEFT, //水平對齊方式,默認左對齊::LEFT TextVAlignment vAlignment = TextVAlignment::TOP //垂直對齊方式,默認頂部 ::TOP ); // |
1
2
3
4
|
// //使用系統的字體名稱 "Arial" 來創建 Label* lb1 = Label::createWithSystemFont( "123abc" , "Arial" , 24); // |
1
2
3
4
5
6
7
8
9
10
|
// static Label* createWithTTF( const std::string& text, const std::string& fontFile, //必須爲字體文件(如"*.ttf") float fontSize, const Size& dimensions = Size::ZERO, TextHAlignment hAlignment = TextHAlignment::LEFT, TextVAlignment vAlignment = TextVAlignment::TOP ); // |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
// typedef struct _ttfConfig { std::string fontFilePath; //字體文件路徑,如 "fonts/Arial.ttf" int fontSize; //字體大小,默認"12" GlyphCollection glyphs; //使用的字符集,默認"DYNAMIC" const char *customGlyphs; bool distanceFieldEnabled; //是否讓字體緊湊,默認false int outlineSize; //字體輪廓大小,默認"0" //構造函數 _ttfConfig( const char * filePath = "" , int size = 12, const GlyphCollection& glyphCollection = GlyphCollection::DYNAMIC, const char *customGlyphCollection = nullptr, bool useDistanceField = false , int outline = 0 ); }TTFConfig; // |
1
2
3
4
5
6
7
8
|
// static Label* createWithTTF( const TTFConfig& ttfConfig, //TTFConfig配置 const std::string& text, //字符串內容 TextHAlignment alignment = TextHAlignment::LEFT, int maxLineWidth = 0 //最大文本行寬,0表示不設置。可用於自動換行只用 ); // |
1
2
3
4
5
6
7
8
9
10
11
12
|
// TTFConfig ttfConfig; ttfConfig.fontFilePath = "fonts/Marker Felt.ttf" ; //必須配置 ttfConfig.fontSize = 12; ttfConfig.distanceFieldEnabled = false ; ttfConfig.outlineSize = 0; ttfConfig.glyphs = GlyphCollection::DYNAMIC; ttfConfig.customGlyphs = nullptr; //使用TTFConfig配置,來創建TTF Label* lb3 = Label::createWithTTF(ttfConfig, "123abc" ); // |
1
2
3
4
5
6
7
8
9
|
// //charMapFile : 字符資源圖片png //itemWidth : 每個字符的寬 //itemHeight : 每個字符的高 //startCharMap : 圖片第一個是什麼字符 static Label* createWithCharMap( const std::string& charMapFile, int itemWidth, int itemHeight, int startCharMap); static Label* createWithCharMap(Texture2D* texture, int itemWidth, int itemHeight, int startCharMap); static Label* createWithCharMap( const std::string& plistFile); // |
1
2
3
4
5
|
// //create 字符圖片.png,每個字符寬,高,起始字符 Label* lb4 = Label::createWithCharMap( "fonts/digit.png" , 20, 20, '0' ); lb4->setString( "123456" ); //設置字符串內容 // |
1
2
3
4
5
6
7
|
// //創建圖片紋理Texture2D Texture2D* texture = TextureCache::getInstance()->addImage( "fonts/digit.png" ); Label* lb5 = Label::createWithCharMap(texture, 20, 20, '0' ); lb5->setString( "123456" ); //設置字符串內容 // |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
// <? xml version = "1.0" encoding = "UTF-8" ?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> < plist version = "1.0" > < dict > < key >version</ key > <!-- plist版本 --> < integer >1</ integer > < key >textureFilename</ key > <!-- 字符圖片資源: digit.png --> < string >digit.png</ string > < key >itemWidth</ key > <!-- 每個字符的寬: 20 --> < integer >20</ integer > < key >itemHeight</ key > <!-- 每個字符的高: 20 --> < integer >20</ integer > < key >firstChar</ key > <!-- 起始字符 : '0' --> < integer >48</ integer > </ dict > </ plist > // |
1
2
3
4
5
|
// //plist的配置信息,如上所示 Label* lb6 = Label::createWithCharMap( "fonts/digit.plist" ); lb6->setString( "123456" ); // |
1
2
3
4
5
6
7
8
9
|
// static Label* createWithBMFont( const std::string& bmfontFilePath, //字體文件.font const std::string& text, //內容 const TextHAlignment& alignment = TextHAlignment::LEFT, int maxLineWidth = 0, const Vec2& imageOffset = Vec2::ZERO //字符圖片的起始左上角座標。一般不要設置這個參數,因爲座標的配置均已在.font裏完成 ); // |
1
2
3
|
// Label* lb7 = Label::createWithBMFont( "bitmapFontTest.fnt" , "123abc" , TextHAlignment::LEFT); // |
//
class CC_DLL Label : public SpriteBatchNode, public LabelProtocol
{
/**
* 字體設置
* - setSystemFontName : 字體(字體名字、字體文件)
* - setSystemFontSize : 字體大小
* - setString : 字符串內容
* - setTextColor : 文字內容顏色
**/
//設置System Font類型的字體(字體名字、字體文件)
//設置System Font類型的字體大小
//請不要用於其他Label類型!(TTF、CharMap、BMFont)
virtual void setSystemFontName(const std::string& systemFont);
virtual void setSystemFontSize(float fontSize);
virtual const std::string& getSystemFontName() const { return _systemFont;}
virtual float getSystemFontSize() const { return _systemFontSize;}
//改變字符串內容並重新渲染
//注:如果你沒有爲Label設置TTF/BMFont/CharMap,會產生很大的開銷
virtual void setString(const std::string& text) override;
virtual const std::string& getString() const override { return _originalUTF8String; }
//設置文字顏色,僅支持TTF和System Font
//注:區別 Node節點的顏色
// Node ::setColor : Color3B
// Label::setTextColor : Color4B
virtual void setTextColor(const Color4B &color);
const Color4B& getTextColor() const { return _textColor; }
/**
* 獲取Label的某個字符
* - getLetter
* - 不支持System Font
**/
//不支持System Font
virtual Sprite* getLetter(int lettetIndex);
/**
* 文字渲染效果
* - Shadow : 陰影
* - Outline : 輪廓,僅支持TTF
* - Glow : 發光,僅支持TTF
**/
//陰影Shadow(陰影顏色,相對Label的偏移,模糊度)
//注: 其中blurRadius在3.2中並未實現
virtual void enableShadow(const Color4B& shadowColor = Color4B::BLACK,const Size &offset = Size(2,-2), int blurRadius = 0);
//輪廓Outline,僅支持TTF(輪廓顏色,輪廓粗細)
virtual void enableOutline(const Color4B& outlineColor,int outlineSize = -1);
//發光Glow,僅支持TTF
virtual void enableGlow(const Color4B& glowColor);
//取消陰影/輪廓/發光渲染效果
virtual void disableEffect();
/**
* 對齊方式
* > TextHAlignment : 水平對齊方式
* - TextHAlignment:LEFT : 左對齊
* - TextHAlignment:CENTER : 居中對齊,默認
* - TextHAlignment:RIGHT : 右對齊
* > TextVAlignment : 垂直對齊方式
* - TextVAlignment::TOP : 頂部,默認
* - TextVAlignment::CENTER : 中心
* - TextVAlignment::BOTTOM : 底部
**/
//設置對齊方式
void setAlignment(TextHAlignment hAlignment) { setAlignment(hAlignment,_vAlignment);}
void setAlignment(TextHAlignment hAlignment,TextVAlignment vAlignment);
TextHAlignment getTextAlignment() const { return _hAlignment;}
//設置水平對齊方式
void setHorizontalAlignment(TextHAlignment hAlignment) { setAlignment(hAlignment,_vAlignment); }
TextHAlignment getHorizontalAlignment() const { return _hAlignment; }
//設置垂直對齊方式
void setVerticalAlignment(TextVAlignment vAlignment) { setAlignment(_hAlignment,vAlignment); }
TextVAlignment getVerticalAlignment() const { return _vAlignment; }
/**
* Label尺寸大小
* - setLineBreakWithoutSpace : 開啓自動換行功能
* - setMaxLineWidth : 文字內容的最大行寬
* - setWidth : Label尺寸大小,寬
* - setHeight : Label尺寸大小,高
* - setDimensions : Label尺寸大小
**/
//是否開啓自動換行功能
void setLineBreakWithoutSpace(bool breakWithoutSpace);
//最大行寬,內容超過MaxLineWidth,就會自動換行
//前提條件: 僅在width==0時,起作用。
// > width == 0;
// > setMaxLineWidth(lineWidth);
// > setLineBreakWithoutSpace(true);
//它的效果與下面是類似的.
// > setWidth(lineWidth);
// > setLineBreakWithoutSpace(true);
//只是width==0時,就無法設置文本的對齊方式了.
void setMaxLineWidth(unsigned int maxLineWidth);
unsigned int getMaxLineWidth() { return _maxLineWidth;}
//設置Label的尺寸大小
//可以理解爲Label的文本框大小
//當setLineBreakWithoutSpace(true)時,內容超過width,會自動換行
//並且內容支持文本的對齊方式
//注:設置尺寸大小,使用的是setDimensions,而不是setContentSize !
void setWidth(unsigned int width) { setDimensions(width,_labelHeight); }
void setHeight(unsigned int height){ setDimensions(_labelWidth,height); }
void setDimensions(unsigned int width,unsigned int height);
unsigned int getWidth() const { return _labelWidth; }
unsigned int getHeight() const { return _labelHeight; }
const Size& getDimensions() const{ return _labelDimensions; }
/**
* v3.2 新增
* - setLineHeight : 設置行間距
* - setAdditionalKerning : 設置文字間距
* - getStringLength : 字符串內容長度
*/
//設置行間距,不支持system font
void setLineHeight(float height);
float getLineHeight() const;
//設置文字間距,不支持system font
void setAdditionalKerning(float space);
float getAdditionalKerning() const;
//獲取Label的字符串內容長度
int getStringLength() const;
/**
* 重寫Node父類的方法
* - setBlendFunc : 混合模式
* - setScale : 放縮字體大小
* - addChild : 添加子節點
* - getDescription : 顯示Label的描述
**/
//設置顏色混合模式
virtual void setBlendFunc(const BlendFunc &blendFunc) override;
//放縮字體大小(一般用於CharMap、BMFont)
virtual void setScale(float scale) override;
virtual void setScaleX(float scaleX) override;
virtual void setScaleY(float scaleY) override;
virtual float getScaleX() const override;
virtual float getScaleY() const override;
//添加子節點
virtual void addChild(Node * child, int zOrder=0, int tag=0) override;
virtual void sortAllChildren() override;
//Label描述
virtual std::string getDescription() const override;
};
//
1
2
3
4
5
6
7
8
9
10
11
12
|
// Label* lb = Label::createWithTTF( "123abc" , "fonts/Marker Felt.ttf" , 50); lb->setPosition(visibleSize / 2); this ->addChild(lb); lb->enableShadow(Color4B::GREEN, Size(10, 10)); //陰影 lb->enableOutline(Color4B::RED, 3); //輪廓 //lb->enableGlow(Color4B::GREEN); //發光 //取消陰影、輪廓、發光效果 //lb->disableEffect(); // |
1
2
3
4
|
// lb->setLineBreakWithoutSpace( true ); lb->setMaxLineWidth(120); //最大寬度120 // |
1
2
3
4
5
|
// lb->setLineBreakWithoutSpace( true ); lb->setWidth(80); //設置Label尺寸寬80 lb->setMaxLineWidth(120); //設置了Label width,這個就無效了 // |
1
2
3
4
|
// lb->setLineHeight(80); lb->setAdditionalKerning(10); // |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
// Label* lb = Label::createWithTTF( "123abc" , "fonts/Marker Felt.ttf" , 50); lb->setPosition(visibleSize / 2); this ->addChild(lb); //獲取字符串總長度,length = 6 CCLOG( "%d" , lb->getStringLength()); //獲取第1個字符 Sprite* letter1 = lb->getLetter(1); letter1->setColor(Color3B::GREEN); //設置顏色 letter1->setScale(2.0f); //放縮 //獲取第4個字符 Sprite* letter4 = lb->getLetter(4); letter4->setColor(Color3B::RED); //設置顏色 letter4->runAction(RepeatForever::create(RotateBy::create(1.0f, 90))); //執行旋轉動作 // |