cocos2d-x 3.1.1 step by step 学习笔记4 标签使用

在cocos3.0之前有三个标签

LabelTTF

LabelAtlas

LabelBMFont

 

1):LabelTTFT:

LabelTTF是基于系统字体来实现标签内容样式的,定义方式如下:

static LabelTTFcreate (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 Vec2imageOffset = 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

createWithSystemFont (

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

createWithTTF (

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

createWithTTF (

const TTFConfig &ttfConfig,

const std::string &text,

TextHAlignment alignment=TextHAlignment::LEFT,

 int maxLineWidth=0

)

 Create a label with TTF configuration. More...

static Label

createWithBMFont (

const std::string &bmfontFilePath,  //位图字体文件

const std::string &text,//要显示的文字

 const TextHAlignment &alignment=TextHAlignment::LEFT,//文字横向对齐方式可以省略

 int maxLineWidth=0, //可以省略

const Vec2 &imageOffset=Vec2::ZERO//可以省略

)

 

 

static LabelcreateWithCharMap (const std::string &charMapFile, int itemWidth, int itemHeight, int startCharMap)
 
static LabelcreateWithCharMap (Texture2D *texture, int itemWidth, int itemHeight, int startCharMap)
 
static LabelcreateWithCharMap (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);

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值