zoukankan      html  css  js  c++  java
  • Cocos2d-x 3.0标签类Label

    Cocos2d-x 3.0后推出了新的标签类Label,这样的标签通过使用FreeType[1]来使它在不同的平台上有同样的视觉效果。因为使用更快的缓存代理,它的渲染也将更加高速。

    Label提供了描边和阴影等特性。
    Label类的类图例如以下图所看到的:

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

    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函数例如以下:

    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结构体的定义例如以下:
                 
    _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)是设置标签的颜色。

    [1] FreeType库是一个全然免费(开源)的、高质量的且可移植的字体引擎,它提供统一的接口来訪问多种字体格式文件。——引自于百度百科http://baike.baidu.com/view/4579855.htm
  • 相关阅读:
    模拟登陆江西理工大学教务系统
    python3爬虫 -----华东交大校园新闻爬取与数据分析
    以selenium模拟登陆12306
    PAT (Basic Level) Practice (中文)1076 Wifi密码 (15 分)
    PAT (Basic Level) Practice (中文)1047 编程团体赛 (20 分)
    PAT (Basic Level) Practice (中文)1029 旧键盘 (20 分)
    PAT (Basic Level) Practice (中文)1016 部分A+B (15 分)
    PAT (Basic Level) Practice (中文)1031 查验身份证 (15 分)
    PAT (Basic Level) Practice (中文)1041 考试座位号 (15 分)
    PAT (Basic Level) Practice (中文)1037 在霍格沃茨找零钱 (20 分)
  • 原文地址:https://www.cnblogs.com/mfrbuaa/p/3884335.html
Copyright © 2011-2022 走看看