Cocos2d-x 3.0標籤類Label

Cocos2d-x 3.0後推出了新的標籤類Label,這種標籤經過使用FreeType[1]來使它在不一樣的平臺上有相同的視覺效果。因爲使用更快的緩存代理,它的渲染也將更加快速。Label提供了描邊和陰影等特性。

Label類的類圖以下圖所示:html


 

建立Label類靜態create函數經常使用的有以下幾個:緩存

[html] view plaincopy在CODE上查看代碼片派生到個人代碼片函數

  1. static Label* createWithSystemFont(conststd::string &text,             //是要顯示的文字                             字體

  2.                   const std::string& font,                                                       //系統字體名  this

  3.                   float fontSize,                                                            //字體的大小  spa

  4.                   const Size& dimensions = Size::ZERO,                            //在屏幕上佔用的區域大小,可省略  .net

  5.                   TextHAlignment  hAlignment = TextHAlignment::LEFT,          //文字橫向對齊方式,可省略  代理

  6.                   TextVAlignment  vAlignment = TextVAlignment::TOP)   //文字縱向對齊方式,可省略  code

  7.    

  8. static Label* createWithTTF(conststd::string & text,  orm

  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

相關文章
相關標籤/搜索