在3.x中,废弃了2.x里的LabelTTF、LabelAtlas、LabelBMFont三个字体类,取而代之的是全新的字体标签Label。关于cocos2d-x label字符串不同大小的改变,实际上Label是将三个字体类进行了融合,进行统一的管理与渲染,这使得创建字体标签Label的方式更加统一,更加方便。
在3.x中,Label支持四种方式的标签创建。并新增了阴影Shadow、轮廓Outline、发光Glow效果的支持。还支持文字内容的行间距、文字间距、自动换行的设置。
创建系统原生字体API:createWithSystemFont
创建TTF:createWithTTF(原LabelTTF)
创建CharMap:createWithCharMap(原LabelAtlas)
创建BMFont:createWithBMFont(原LabelBMFont)
Label的属性与方法
文字效果渲染:Shadow、Outline、Glow
对齐方式:TextHAlignment、TextVAlignment
Label的尺寸大小
自动换行
行间距、文字间距
单独设置某个字符
PS:关于图片资源,请在Cocos2dx给出的官方样例cpp-tests中寻找。
【createWithSystemFont】
创建系统原生字体的API。
创建方式如下:
- //
- 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
- );
- //
使用举例:
- //
- //使用系统的字体名称 "Arial" 来创建
- Label* lb1 = Label::createWithSystemFont("123abc", "Arial", 24);
- //
【createWithTTF】
创建TTF的方式有以下两种:
方式一:与2.x中LabelTTF的创建类似,不过使用的fontFile必须为字体文件。
方式二:通过TTF的配置信息数据结构TTFConfig来创建。
1、方式一:与SystemFont创建类似
注:区别在于fontFile必须为字体文件(如"*.ttf"),即不支持使用系统字体名称来创建。
2、方式二:通过TTFConfig配置来创建
2.1、TTFConfig配置
- //
- 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;
- //
- //
- 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;
- //
使用举例:
- //
- 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");
- //
CharMap的用法与2.x中的LabelAtlas是一样的,一般用来显示数字。不过它也可以用来显示其他字符,如英文字符。
字体文件资源一般来自一张.png图片,或.plist文件。
注:图片中每个字符的大小必须是固定的,若要改变字体大小,只能通过setScale放缩来实现。
创建CharMap有三种方式:
使用.png图片创建
使用纹理Texture2D创建
使用.plist创建
从图片中从左到右,一块一块截取。从字符startCharMap开始一一对应。
第一块小图片对应字符startCharMap;第二块小图片对应字符startCharMap+1;第三块对应startCharMap+2……以此类推。
注:startCharMap为ASCII码,即:数字'0'为48。
- //
- //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);
- //