• 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
  • 相关阅读:
    akka设计模式系列-actor锚定
    Akka源码分析-Remote-位置透明
    Akka源码分析-Remote-网络链接生命周期
    Akka源码分析-Remote-收消息
    Akka源码分析-Remote-网络链接
    Akka源码分析-Remote-发消息
    Akka源码分析-Remote-Actor创建
    Akka源码分析-Remote-ActorSystem
    Akka源码分析-ask模式
    Akka源码分析-深入ActorRef&ActorPath
  • 原文地址:https://www.cnblogs.com/mfrbuaa/p/3884335.html
Copyright © 2020-2023  润新知