Cocos2d-x 3.0标签类Label

简介:

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.cppinit函数如下:

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,如需转载请自行联系原作者

相关文章
|
4月前
|
搜索推荐
<img>标签上的 title 属性与alt 属性的区别
<img>标签上的 title 属性与alt 属性的区别
276 0
|
6月前
Flutter更改主题颜色报错:type ‘Color‘ is not a subtype of type ‘MaterialColor‘
Flutter更改主题颜色报错:type ‘Color‘ is not a subtype of type ‘MaterialColor‘
69 4
|
XML Android开发 数据格式
Android中利用shape属性自定义设置Button按钮
Android中利用shape属性自定义设置Button按钮
310 0
|
9月前
|
前端开发
BootStrap让两个控件在一行显示(label和input同行)
BootStrap让两个控件在一行显示(label和input同行)
460 0
|
前端开发
[√]shadowdom里面的i标签icon不显示,元素覆盖导致
[√]shadowdom里面的i标签icon不显示,元素覆盖导致
133 1
Cocos Creator3.8 项目实战(三)去除scrollview背景色和label 对齐方式设置无效问题解决
Cocos Creator3.8 项目实战(三)去除scrollview背景色和label 对齐方式设置无效问题解决
176 0
|
前端开发
react是否支持给标签设置自定义的属性,比如给video标签设置webkit-playsinline?
react是否支持给标签设置自定义的属性,比如给video标签设置webkit-playsinline?
178 0
|
存储 编解码 图形学
cocos2dx如何让label支持合批
cocos2dx如何让label支持合批
420 0
|
存储
[✔️] cocos2dx label合批探讨
[✔️] cocos2dx label合批探讨
239 0
从0开发游戏引擎之2D基础组件的实现(Image;Label;Button)
从0开发游戏引擎之2D基础组件的实现(Image;Label;Button)

热门文章

最新文章