Cocos2d-x 3.0后推出了新的标签类Label,这种标签通过使用FreeType[1]来使它在不同的平台上有相同的视觉效果。由于使用更快的缓存代理,它的渲染也将更加快速。Label提供了描边和阴影等特性。

Label类的类图如下图所示:


创建Label类静态create函数常用的有如下几个:

staticLabel*createWithSystemFont(conststd::string&text,//是要显示的文字conststd::string&font,//系统字体名floatfontSize,//字体的大小constSize&dimensions=Size::ZERO,//在屏幕上占用的区域大小,可省略TextHAlignmenthAlignment=TextHAlignment::LEFT,//文字横向对齐方式,可省略TextVAlignmentvAlignment=TextVAlignment::TOP)//文字纵向对齐方式,可省略staticLabel*createWithTTF(conststd::string&text,conststd::string&fontFile,//字体文件floatfontSize,constSize&dimensions=Size::ZERO,//可省略TextHAlignmenthAlignment=TextHAlignment::LEFT,//可省略TextVAlignmentvAlignment=TextVAlignment::TOP//可省略)staticLabel*createWithTTF(constTTFConfig&ttfConfig,conststd::string&text,TextHAlignmentalignment=TextHAlignment::LEFT,intmaxLineWidth=0)staticLabel*createWithBMFont(conststd::string&bmfontFilePath,//位图字体文件conststd::string&text,constTextHAlignment&alignment=TextHAlignment::LEFT,//可省略intmaxLineWidth=0,//可省略constPoint&p_w_picpathOffset=Point::ZERO//可省略)



其中createWithSystemFont是创建系统字体标签对象,createWithTTF是创建TTF字体标签对象,createWithBMFont是创建位图字体标签对象。

下面我们通过一个实例介绍一下,它们的使用。这个实例如图下图所示。


下面我们看看HelloWorldScene.cpp中init函数如下:

boolHelloWorld::init(){if(!Layer::init()){returnfalse;}SizevisibleSize=Director::getInstance()->getVisibleSize();Pointorigin=Director::getInstance()->getVisibleOrigin();autocloseItem=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));automenu=Menu::create(closeItem,NULL);menu->setPosition(Point::ZERO);this->addChild(menu,1);autolabel1=Label::createWithSystemFont("HelloWorld1","Arial",36);①label1->setPosition(Point(origin.x+visibleSize.width/2,origin.y+visibleSize.height-100));this->addChild(label1,1);autolabel2=Label::createWithTTF("HelloWorld2","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/MarkerFelt.ttf",36,GlyphCollection::DYNAMIC);④autolabel4=Label::createWithTTF(ttfConfig,"HelloWorld4");⑤label4->setPosition(Point(origin.x+visibleSize.width/2,origin.y+visibleSize.height-400));this->addChild(label4,1);ttfConfig.outlineSize=4;⑥autolabel5=Label::createWithTTF(ttfConfig,"HelloWorld5");⑦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);returntrue;}



在上面的代码中第①是通过createWithSystemFont函数创建Label对象,第②行代码是通过createWithTTF是创建TTF字体标签对象,第③行代码是createWithBMFont是创建位图字体标签对象。

第④行代码TTFConfig ttfConfig("fonts/Marker Felt.ttf", 36, GlyphCollection::DYNAMIC)是创建一个TTFConfig结构体变量,TTFConfig结构体的定义如下:

_ttfConfig(constchar*filePath="",//字体文件路径intsize=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)是设置标签的颜色。

更多精彩内容请关注史上最牛的cocos2d-x课程

《cocos2d-x手机游戏开发实战》直播课程第一期

报名Cocos2d-x直播课程还送关东升老师iOS终身会员。

课程链接:http://edu.51cto.com/pack/view/id-13.html

会员链接:http://edu.51cto.com/member/id-3.html

更多内容请关注Cocos2d-x系列图书《Cocos2d-x实战(卷Ⅰ):C++开发》

本书交流讨论网站:http://www.cocoagame.net

欢迎加入cocos2d-x技术讨论群:257760386、327403678