Cocos2d-x 3.0后推出了新的标签类Label,这种标签通过使用FreeType[1]来使它在不同的平台上有相同的视觉效果。由于使用更快的缓存代理,它的渲染也将更加快速。Label提供了描边和阴影等特性。
Label类的类图如下图所示:
创建Label类静态create函数常用的有如下几个:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
|
static
Label* createWithSystemFont(conststd::string &text,
//是要显示的文字
const
std::string& font,
//系统字体名
float
fontSize,
//字体的大小
const
Size& dimensions = Size::ZERO,
//在屏幕上占用的区域大小,可省略
TextHAlignment hAlignment = TextHAlignment::LEFT,
//文字横向对齐方式,可省略
TextVAlignment vAlignment = TextVAlignment::TOP)
//文字纵向对齐方式,可省略
static
Label* createWithTTF(conststd::string & text,
const
std::string & fontFile,
//字体文件
float
fontSize,
const
Size & dimensions = Size::ZERO,
//可省略
TextHAlignment hAlignment= TextHAlignment::LEFT,
//可省略
TextVAlignment vAlignment= TextVAlignment::TOP
//可省略
)
static
Label* createWithTTF(constTTFConfig& ttfConfig,
const
std::string& text,
TextHAlignment alignment =TextHAlignment::LEFT,
int
maxLineWidth = 0
)
static
Label* createWithBMFont(conststd::string& bmfontFilePath,
//位图字体文件
const
std::string& text,
const
TextHAlignment& alignment =TextHAlignment::LEFT,
//可省略
int
maxLineWidth = 0,
//可省略
const
Point& imageOffset = Point::ZERO
//可省略
)
|
其中createWithSystemFont是创建系统字体标签对象,createWithTTF是创建TTF字体标签对象,createWithBMFont是创建位图字体标签对象。
下面我们通过一个实例介绍一下,它们的使用。这个实例如图下图所示。
下面我们看看HelloWorldScene.cpp中init函数如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
|
bool
HelloWorld::init()
{
if
( !Layer::init() )
{
return
false
;
}
Size visibleSize = Director::getInstance()->getVisibleSize();
Point origin = Director::getInstance()->getVisibleOrigin();
auto
closeItem = MenuItemImage::create(
"CloseNormal.png"
,
"CloseSelected.png"
,
CC_CALLBACK_1(HelloWorld::menuCloseCallback,
this
));
closeItem->setPosition(Point(origin.x+ visibleSize.width - closeItem->getContentSize().width/2 ,
origin.y + closeItem->getContentSize().height/2));
auto
menu = Menu::create(closeItem, NULL);
menu->setPosition(Point::ZERO);
this
->addChild(menu, 1);
autolabel1 = Label::createWithSystemFont(
"Hello World1"
,
"Arial"
, 36); ①
label1->setPosition(Point(origin.x+ visibleSize.width/2,
origin.y + visibleSize.height - 100));
this
->addChild(label1,1);
autolabel2 = Label::createWithTTF(
"Hello World2"
,
"fonts/MarkerFelt.ttf"
, 36); ②
label2->setPosition(Point(origin.x+ visibleSize.width/2,
origin.y + visibleSize.height - 200));
this
->addChild(label2,1);
autolabel3 = Label::createWithBMFont(
"fonts/BMFont.fnt"
,
"HelloWorld3"
); ③
label3->setPosition(Point(origin.x+ visibleSize.width/2,
origin.y + visibleSize.height - 300));
this
->addChild(label3,1);
TTFConfigttfConfig(
"fonts/Marker Felt.ttf"
,
36,
GlyphCollection::DYNAMIC); ④
autolabel4 = Label::createWithTTF(ttfConfig,
"Hello World4"
); ⑤
label4->setPosition(Point(origin.x+ visibleSize.width/2,
origin.y + visibleSize.height - 400));
this
->addChild(label4, 1);
ttfConfig.outlineSize= 4; ⑥
autolabel5 = 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);
return
true
;
}
|
在上面的代码中第①是通过createWithSystemFont函数创建Label对象,第②行代码是通过createWithTTF是创建TTF字体标签对象,第③行代码是createWithBMFont是创建位图字体标签对象。
第④行代码TTFConfig ttfConfig("fonts/Marker Felt.ttf", 36, GlyphCollection::DYNAMIC)是创建一个TTFConfig结构体变量,TTFConfig结构体的定义如下:
1
2
3
4
5
6
7
|
_ttfConfig(constchar* filePath =
""
,
//字体文件路径
int
size = 12,
//字体大小
constGlyphCollection& glyphCollection = GlyphCollection::DYNAMIC,
//字体库类型
constchar * customGlyphCollection = nullptr,
//自定义字体库
booluseDistanceField =
false
,
//用户是否可缩放字体
intoutline = 0
//字体描边
)
|
第⑤行代码Label::createWithTTF(ttfConfig,"Hello World4")是通过指定TTFConfig创建TTF字体标签。第⑥行代码ttfConfig.outlineSize = 4设置TTFConfig的描边字段。第⑦行代码Label::createWithTTF(ttfConfig,"Hello World5")是重新创建TTF字体标签。
第⑧行代码label5->enableShadow(Color4B(255,255,255,128),Size(4, -4))是设置标签的阴影效果。第⑨行代码label5->setColor(Color3B::RED)是设置标签的颜色。
本文转自 tony关东升 51CTO博客,原文链接:http://blog.51cto.com/tonyguan/1420014,如需转载请自行联系原作者