在cocos3.0之前有三个标签
LabelTTF
LabelAtlas
LabelBMFont
1):LabelTTFT:
LabelTTF是基于系统字体来实现标签内容样式的,定义方式如下:
static LabelTTF * | create (const std::string &string, const std::string &fontName, float fontSize, const Size &dimensions=Size::ZERO,TextHAlignment hAlignment=TextHAlignment::CENTER,TextVAlignment vAlignment=TextVAlignment::TOP) |
LabelTTF* ttf0 = LabelTTf::create("Hello World", "Helvetica",12,SizeMake(256,32),TextHAlignment::CENTER,TextVAlignment::TOP)
其中第一个参数是文本内容,第二个参数是使用的字体,第三个参数是字体的字号大小,第四个参数是范围大小,第五六个参数是对齐的方式。
2):LabelAtlas:
LabelAtlas是使用图片作为文字的一种方式,该类可以通过图片直接定义,代码如下:
static LabelAtlas* create | ( | const std::string & | string, |
const std::string & | charMapFile, | ||
int | itemWidth, | ||
int | itemHeight, | ||
int | startCharMap | ||
) |
LabelAtlas* Label1 = LabelAtlas::create("123 Test", "fonts/tuffy_bold_italic-charmap.png",48,64,' ');
以上代码创建文字显示标签,第一个参数是要显示的文字内容,第二个参数是图片路径,第三个第四个参数是字符宽高,第四个参数是起始字符。
LabelAtlas 也可以使用plist配置文件来描述定义,代码如下:
LabelAtlas * Label1 = LabelAtlas::create ("123 Test","fonts/tuffy_bold_italic-charmap.plist");
在plist文件中描述了文字的相关属性,清单文件如下:
<?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>versio<key>
<integer>1</integer>
<key> textureFilename</key>
<string> fonts/tuffy_bold_italic-charmap.png</string>
<key>itemHeight</key>
<integer>64</integer>
<key>itemWidth</key>
<integer>48</integer>
<key> firstChar</key>
<integer>32</integer>
</dict>
</plist>
3):LabelBMFont:
static LabelBMFont* create | ( | const std::string & | str, |
const std::string & | fntFile, | ||
float | width = 0 , | ||
TextHAlignment | alignment = TextHAlignment::LEFT , | ||
const Vec2 & | imageOffset = Vec2::ZERO | ||
) |
LabelBMFont的每一个字都是一个精灵类。每个字都可以有自己的动作,并且支持FNT类型的文件,创建LabelBMFont需要:一个图片集(.png)和
一个字体坐标文件(.fnt)代码如下:
LabelBMFont* label1 = LabelBMFont::create("Test","fonts/bitmapFontTest2.fnt")
LabelBMFont的速度比LabelTTF的速度快很多,它的每个字符的宽度是可以变化的.
在cocos2d-x 3.0之后推出了新的标签类Label,这种标签通过使用FreeType来使得它在不同的平台上具有相同的效果。
它使用了更快的缓存代理,所以它的渲染速度也在加快。Label提供了描边和阴影等特性。
创建Label类常用的静态函数有如下:
static Label * | const std::string &text, // 要显示的文字 const std::string &font, //系统字体名 float fontSize, //字体的大小 const Size &dimensions=Size::ZERO, //在屏幕上占用的区域大小,可以省略 TextHAlignment hAlignment=TextHAlignment::LEFT, //文字横向对齐方式,可以省略 TextVAlignment vAlignment=TextVAlignment::TOP) //文字纵向对齐方式,可以省略 |
Creates a label with an initial string,font[font name or font file],font size, dimension in points, horizontal alignment and vertical alignment.More... |
static Label * | const std::string &text, const std::string &fontFile, float fontSize, const Size &dimensions=Size::ZERO, TextHAlignment hAlignment=TextHAlignment::LEFT, TextVAlignment vAlignment=TextVAlignment::TOP ) |
static Label * | const TTFConfig &ttfConfig, const std::string &text, TextHAlignment alignment=TextHAlignment::LEFT, int maxLineWidth=0 ) |
Create a label with TTF configuration. More... |
static Label * | const std::string &bmfontFilePath, //位图字体文件 const std::string &text,//要显示的文字 const TextHAlignment &alignment=TextHAlignment::LEFT,//文字横向对齐方式可以省略 int maxLineWidth=0, //可以省略 const Vec2 &imageOffset=Vec2::ZERO//可以省略 ) |
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>:
auto label1 = Label::createWithSystemFont("Test1","Arial",36);
label1->setPosition(Point(origin.x+ visibleSize.width/2, origin.y + visibleSize.height - 100));
this->addChild(label1,1);
<2>
auto label2 = Label::createWithTTF("Test1","fonts/Marker Felt.ttf",36);
label2->setPosition(Point(origin.x+ visibleSize.width/2, origin.y + visibleSize.height - 200));
this->addChild(label2,1);
<3>:
auto label3 = Label::createWithBMFont("fonts/BMFont.fnt","Test1");
label3->setPosition(Point(origin.x+ visibleSize.width/2, origin.y + visibleSize.height - 300));
this->addChild(label3,1);
<4>:
TTFConfig ttfConfig("fonts/Marker Felt.ttf",
36,
GlyphCollection::DYNAMIC);
auto label4 = Label::createWithTTF(ttfConfig,"Test 1");
label4->setPosition(Point(origin.x+ visibleSize.width/2, origin.y + visibleSize.height - 400));
this->addChild(label4, 1);
<5>:
ttfConfig.outlineSize= 4;
auto label5 = Label::createWithTTF(ttfConfig, "Hello World5");
label5->setPosition(Point(origin.x+ visibleSize.width/2, origin.y + visibleSize.height - 500));
label5->enableShadow(Color4B(255,255,255,128),Size(4, -4));
label5->setColor(Color3B::RED);
this->addChild(label5,1);
运行结果:
上面的
<1>通过createWithSystemFont函数创建Label对象
<2>通过createWithTTF是创建TTF字体标签对象
<3>通过createWithBMFont是创建位图字体标签对象
<4>TTFConfig ttfConfig("fonts/Marker Felt.ttf", 36, GlyphCollection::DYNAMIC)是创建一个TTFConfig结构体变量,代码Label::createWithTTF(ttfConfig,"Hello World4")是通过指定TTFConfig创建TTF字体标签
<5>代码label5->enableShadow(Color4B(255,255,255,128),Size(4, -4))是设置标签的阴影效果。第⑨行代码label5->setColor(Color3B::RED)是设置标签的颜色
enum class LabelEffect {
NORMAL, //普通标签)
OUTLINE, //有描边
SHADOW, //有阴影
GLOW //有荧光
};
auto label5 = Label::createWithTTF(ttfConfig, "Hello World5");
label5->setPosition(Point(origin.x+ visibleSize.width/2,
origin.y + visibleSize.height - 500));
label5->enableGlow(Color4B::GREEN);//显示荧光效果
label5->enableShadow(Color4B(255,255,255,128),Size(4, -4)); //设置标签的阴影效果
label5->setColor(Color3B::GREEN); //设置设置标签的颜色
label5->enableOutline(Color4B(255,125,0,255),1);//设置描边。第一个参数是描边的颜色,第二个是描边的大小
this->addChild(label5,1);