`

Cocos2d-x 3.0标签类Label

阅读更多

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

Label类的类图如下图所示:

 

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

 

[html] view plaincopy在CODE上查看代码片派生到我的代码片
 
  1. static Label* createWithSystemFont(conststd::string &text,             //是要显示的文字                             
  2.                   const std::string& font,                                                       //系统字体名  
  3.                   float fontSize,                                                            //字体的大小  
  4.                   const Size& dimensions = Size::ZERO,                            //在屏幕上占用的区域大小,可省略  
  5.                   TextHAlignment  hAlignment = TextHAlignment::LEFT,          //文字横向对齐方式,可省略  
  6.                   TextVAlignment  vAlignment = TextVAlignment::TOP)   //文字纵向对齐方式,可省略  
  7.    
  8. static Label* createWithTTF(conststd::string & text,  
  9.          const std::string &  fontFile,                                                              //字体文件  
  10.          float fontSize,  
  11.          const Size &  dimensions = Size::ZERO,                                           //可省略  
  12.          TextHAlignment          hAlignmentTextHAlignment::LEFT,          //可省略  
  13.          TextVAlignment           vAlignmentTextVAlignment::TOP              //可省略  
  14.     )       
  15.    
  16. static Label* createWithTTF(constTTFConfig& ttfConfig,  
  17.          const std::string& text,  
  18.          TextHAlignment alignment =TextHAlignment::LEFT,  
  19.          int maxLineWidth = 0  
  20.     )  
  21.    
  22. static Label* createWithBMFont(conststd::string& bmfontFilePath,          //位图字体文件  
  23.          const std::string&  text,                                                              
  24.          const TextHAlignment& alignment =TextHAlignment::LEFT, //可省略  
  25.          int maxLineWidth = 0,                                                                       //可省略  
  26.          const Point&  imageOffset = Point::ZERO                                //可省略  
  27.     )   

 

 

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

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

下面我们看看HelloWorldScene.cppinit函数如下:

[html] view plaincopy在CODE上查看代码片派生到我的代码片
 
  1. bool HelloWorld::init()  
  2. {  
  3.    if ( !Layer::init() )  
  4.    {  
  5.        return false;  
  6.    }  
  7.      
  8.    Size visibleSize = Director::getInstance()->getVisibleSize();  
  9.    Point origin = Director::getInstance()->getVisibleOrigin();  
  10.    auto closeItem = MenuItemImage::create(  
  11.                                           "CloseNormal.png",  
  12.                                           "CloseSelected.png",  
  13.                                  CC_CALLBACK_1(HelloWorld::menuCloseCallback, this));  
  14.      
  15.     closeItem->setPosition(Point(origin.x+ visibleSize.width - closeItem->getContentSize().width/2 ,  
  16.                                 origin.y + closeItem->getContentSize().height/2));  
  17.    
  18.     
  19.    auto menu = Menu::create(closeItem, NULL);  
  20.    menu->setPosition(Point::ZERO);  
  21.    this->addChild(menu, 1);  
  22.      
  23.     autolabel1 = Label::createWithSystemFont("Hello World1","Arial", 36);                                   ①  
  24.     label1->setPosition(Point(origin.x+ visibleSize.width/2,  
  25.          origin.y + visibleSize.height - 100));  
  26.     this->addChild(label1,1);  
  27.    
  28.     autolabel2 = Label::createWithTTF("Hello World2", "fonts/MarkerFelt.ttf", 36);                       ②  
  29.     label2->setPosition(Point(origin.x+ visibleSize.width/2,  
  30.          origin.y + visibleSize.height - 200));  
  31.     this->addChild(label2,1);  
  32.    
  33.     autolabel3 = Label::createWithBMFont("fonts/BMFont.fnt", "HelloWorld3");                            ③  
  34.     label3->setPosition(Point(origin.x+ visibleSize.width/2,  
  35.          origin.y + visibleSize.height - 300));  
  36.     this->addChild(label3,1);  
  37.    
  38.     TTFConfigttfConfig("fonts/Marker Felt.ttf",  
  39.          36,  
  40.          GlyphCollection::DYNAMIC);                                                                                                  ④  
  41.     autolabel4 = Label::createWithTTF(ttfConfig, "Hello World4");                                                  ⑤  
  42.     label4->setPosition(Point(origin.x+ visibleSize.width/2,  
  43.          origin.y + visibleSize.height - 400));  
  44.     this->addChild(label4, 1);  
  45.    
  46.     ttfConfig.outlineSize4;                                                                                                     ⑥  
  47.     autolabel5 = Label::createWithTTF(ttfConfig, "Hello World5");                                                  ⑦  
  48.     label5->setPosition(Point(origin.x+ visibleSize.width/2,  
  49.          origin.y + visibleSize.height - 500));  
  50.     label5->enableShadow(Color4B(255,255,255,128),Size(4, -4));                                        ⑧  
  51.     label5->setColor(Color3B::RED);                                                                                                 ⑨  
  52.     this->addChild(label5,1);  
  53.    
  54.  return true;  
  55.               }  

 

 

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

 

 

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

              

[html] view plaincopy在CODE上查看代码片派生到我的代码片
 
  1. _ttfConfig(constchar* filePath = "",                                                                         //字体文件路径  
  2.     int  size = 12,                                                                                            //字体大小  
  3.     constGlyphCollection& glyphCollection = GlyphCollection::DYNAMIC,     //字体库类型  
  4.     constchar * customGlyphCollection = nullptr,                                     //自定义字体库  
  5.     booluseDistanceField = false,                                                                         //用户是否可缩放字体  
  6.     intoutline = 0                                                                                                      //字体描边  
  7.                )  

 

 

行代码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)是设置标签的颜色。


[1] FreeType库是一个完全免费(开源)的、高质量的且可移植的字体引擎,它提供统一的接口来访问多种字体格式文件。——引自于百度百科http://baike.baidu.com/view/4579855.htm

分享到:
评论

相关推荐

    Cocos2d-x 3.0的俄罗斯方块代码

    《Cocos2d-x 3.0的俄罗斯方块代码》是一个基于Cocos2d-x游戏引擎3.0及以上版本实现的经典游戏项目。Cocos2d-x是一个广泛使用的开源跨平台2D游戏开发框架,它允许开发者用C++、Lua或JavaScript编写游戏,并在iOS、...

    cocos2d-x 3.0 离线文档

    10. **UI组件**:cocos2d-x提供了一些基本的UI组件,如Label、Button、Menu等,可构建用户界面。 11. **性能优化**:了解如何使用RenderTexture、BatchNode、DrawNode等技术来提升性能,以及内存管理和垃圾回收的...

    Cocos2d-x 3.0开发-点击交互的四种处理.docx

    随着Cocos2d-x 3.0的发布,虽然这种方法仍然可用,但其实现方式发生了一些变化,例如使用了C++11的新特性来简化回调函数的绑定过程。下面通过示例代码来展示这一变化: ```cpp // 函数回调示例 void ...

    最新cocos2d-x 3.0博客教学 小游戏[史上最坑爹的游戏] 003第二关:点击绿色按钮100下

    在本教程中,我们将深入探讨如何使用Cocos2d-x 3.0框架开发一个名为“史上最坑爹的游戏”的小型游戏。Cocos2d-x是一个跨平台的2D游戏开发框架,广泛应用于iOS、Android以及多个其他操作系统。在这个教学系列的第三...

    cocos2d-x 3.0 api 英文版

    《cocos2d-x 3.0 API 英文版》是针对游戏开发框架cocos2d-x 3.0的重要参考资料,它包含了详细的API接口文档,为开发者提供了丰富的技术指导。cocos2d-x是一个开源的游戏开发库,基于C++,支持多平台,包括iOS、...

    结合cocos2d-js3.0结合cocos studio实现时钟倒计时功能

    Cocos2d-js是Cocos2d-x的一个分支,它允许开发者使用JavaScript编写游戏和应用,而Cocos Studio则是一个强大的可视化设计工具,用于创建游戏场景、UI布局和动画。 首先,我们需要了解Cocos2d-js的基础知识。它是一...

    cocos2d-x-3.0别猜百块儿

    《Cocos2d-x-3.0:别踩白块儿游戏开发详解》 Cocos2d-x是一款广泛应用于移动游戏开发的开源引擎,尤其在2D游戏领域有着极高的应用价值。本教程以"别踩白块儿"这款游戏为例,深入浅出地讲解如何利用Cocos2d-x 3.0...

    cocos2dxhtml解析.zip

    在Cocos2d-x中,HTML标签的解析通常通过一个叫做`Label`或者`RichText`的类来实现。这些类允许开发者在游戏界面上展示带有HTML标记的文本,使文本样式更加多样化,提高用户体验。 "richtext"标签则进一步强调了这是...

    cocos游戏样例二_基本塔防游戏

    4. **节点(Node)和组件(Component)**:在Cocos2d-x中,Node是所有可视和可交互对象的基类,包括Sprite、Label等。Component则是用于扩展Node功能的模块,如精灵动画组件、音频组件等。 5. **路径规划**:塔防...

    自定义弹出类文件补充完整版

    本资源提供的"自定义弹出类文件补充完整版"是针对Cocos2d-x 3.0版本的一个测试可用的实现,旨在帮助开发者更方便地创建和管理自定义的弹出窗口。 首先,我们要理解Cocos2d-x的基本架构。Cocos2d-x是一个基于C++的...

    CocosEditor-1.5.1-IDEA13.1

    IDE to create multi platform Cocos2d-x games using Javascript or Lua Script. With Cocos2d-x Editor you can: Develop Cocos2d-x games on Windows, Mac OS Scene design you can add labels,label menu ...

    2048游戏代码

    本项目是用Cocos2d-x 3.0框架编写的一个2048游戏实现,Cocos2d-x是一个跨平台的2D游戏开发框架,支持iOS、Android、Windows等多平台。Cocos2d-x使用C++作为主要编程语言,同时也提供了Lua和JavaScript的绑定,使得...

    一个连连看小游戏源码

    《Cocos2d-x开发:基于VS2019的连连看小游戏源码解析》 在游戏开发领域,Cocos2d-x是一个广泛使用的开源跨平台2D游戏引擎,它支持多种操作系统,包括Windows、iOS、Android等。本篇文章将深入探讨如何利用Visual ...

    Game2048:Game2048游戏C ++源代码

    在《2048》游戏中,Cocos2d-x的Scene、Layer、Sprite、Label等类被用于构建游戏界面,Action和Transition则用来实现动态效果,如滑动、动画过渡等。此外,Cocos2d-x的事件系统处理用户触摸事件,使游戏能够响应玩家...

    跳一跳cocos2d

    在本文中,我们将深入探讨使用Cocos2D引擎实现的版本,特别是针对描述中提到的“cocos2d版本3.0以上”。 Cocos2D是一款广泛应用于2D游戏开发的开源引擎,其提供了丰富的功能,包括场景管理、动画制作、物理引擎、...

    跑酷游戏资源 C++ cocos2dx 3.0

    在本文中,我们将深入探讨如何使用C++和cocos2dx 3.0框架来开发跑酷类游戏。cocos2dx是一个强大的跨平台游戏开发框架,它基于C++,并支持多种操作系统,如Android、iOS、Windows等。在"跑酷游戏资源 C++ cocos2dx ...

    Cocos creator中一些控制人物的移动方式总结.zip

    在Cocos Creator中,需要自定义一个UI组件(如Sprite或Label)作为摇杆背景和滑块,并处理滑动事件来计算摇杆的方向和位移。以下是一个简单的摇杆实现: 1. 创建两个Sprite,一个作为摇杆背景,一个作为摇杆滑块。 ...

    cocosCreator笔记

    Cocos Creator是一款强大的2D和2.5D游戏开发框架,深受游戏开发者喜爱。这款工具提供了集成的编辑器、物理引擎、粒子系统、动画编辑、资源管理等一整套解决方案,使得游戏开发流程更为高效。以下是对"Cocos Creator...

    ppz-game代码

    《ppz-game代码》是基于cocos2d 3.0框架开发的一款卡牌游戏的源码资源。Cocos2d是一款广泛应用于游戏开发的开源2D游戏引擎,以其高效、易用和跨平台特性而受到开发者欢迎。在这个ppz.zip压缩包中,包含了构建卡牌...

Global site tag (gtag.js) - Google Analytics