一.簡介
在游戲中,經常需要添加文字標簽。游戲的介紹、游戲中的提示和對話等都需要用到文字。在游戲中,除了系統字體,還有很多地方需要使用由美術人員制作的紋理圖片表現的文字。從代碼的角度來看,它們與一般的紋理圖片沒有區別,就是一張包含文字信息的圖片,此類文字經常被用來當作游戲的標題或者商標。Cocos2d-x為開發者提供了專門用于繪制文字的類。
Cocos2d-x提供了強大的文本渲染功能,既可以直接使用系統字體,也可以自己渲染字體,文本渲染類的繼承關系如下圖所示:
文本渲染類的繼承關系圖
上圖顯示了用于處理文字的4個類:Label、LabelAtlas、LabelBMFont和LabelTTF。這4個類都是通過不同的方式來顯示文字的。它們都繼承自LabelProtocol類。它們的類名中都有一個單詞Label,在Cocos2d-x中,Label代表文字標簽的意思,也就是說這些類是專門用于顯示文字的對象。另外,因為它們都有一個共同的父類Node,所以文字標簽與之前學習的圖層或者精靈等都屬于顯示游戲內容的對象。在實際游戲開發中,讀者可以按照需要選擇一種或多種方式顯示文字。
二.TTF類型標簽LabelTTF
LabelTTF類是通過TTF字體來實現的字體標簽。TTF(True Type Fonts)格式是一種在計算機領域通用的字體格式,可以說是使用最為廣泛的文字顯示格式,比如在Windows操作系統中,就是通過TTF格式字體顯示文字的。這種類型字體文件的擴展名是.ttf。它的繼承關系如下圖所示:
LabelTTF的繼承關系
從上圖可以看出,LabelTTF的另一個父類就是Node。這說明開發者完全可以將LabelTTF的對象當作節點對象來使用,可以執行各種動作以及實現各種變化效果。
LabelTTF類標簽對象的特點如下:
l 任何一種TTF字體都包含了某種語言當中的所有字母以及符號,開發者可以隨機調整字體的大小、顏色以及樣式。
l 因為TTF標準如今已經得到了普及,所以在很多操作系統中已經提供了多種字體,開發者可以直接使用。
l 渲染速度相對較慢,所以通常用于顯示一些靜態的標簽和純文本。
LabelTTF標簽類為開發者提供了一個create函數專門用于創建一個LabelTTF對象,具體聲明如下:
//創建LabelTTF標簽對象,參數為顯示文字內容、字體名稱、字體大小、標簽尺寸大小、文字水平對齊方式、文字豎直對齊方式
static LabelTTF* create(const std::string& string, const std::string& fontName, float fontSize, const Size& dimensions = Size::ZERO, TextHAlignment hAlignment = TextHAlignment::CENTER, TextVAlignment vAlignment = TextVAlignment::TOP)
其中第一個參數是將要顯示的文字內容。第二個參數是所用字體的名稱。第三個參數是字體的大小。第四個參數是字體顯示標簽的尺寸大小,過大會浪費內存空間,過小則不能顯示完整的內容。最后兩個參數是文字繪制時的對齊方式,不同的對齊方式將會導致繪制的文字內容產生位置的變化。水平對齊方式分為左對齊、居中對齊和右對齊。豎直對齊方式分為頂部對齊、中間對齊和底部對齊。接下來通過一個案例來理解LabelTTF類在游戲開發中的具體使用方法。
三.測試LabelTTF類
新建一個項目名為LabelTTFTest,并修改HelloWorldScene.cpp文件中的init函數,具體代碼如下:
//場景初始化方法
Bool HelloWorld::init()
{
//調用父類init函數
If(!Layer::init())
{
Return false;
}
Size visibleSize = Director::getInstance()->getVisibleSize();
Vec2 origin = Director::getInstance()->getVisibleOrigin();
//創建TTF標簽對象,參數為顯示文字內容、字體名稱、字體大小
auto label1 = LabelTTF::create(“top”, “Font/cour.ttf”, 64);
label1->setPosition(visibleSize.width/2, visibleSize.height/2+200);
this->addChild(label1);
//創建TTF標簽對象,參數為顯示文字內容、字體名稱、字體大小、標簽大小、文字水平對齊方式
auto label2 = LabelTTF::create(“center”, “Font/msyh.ttf”, 64, Size(visibleSize.width/3, 200), TextHAlignment::LEFT);
label2->setPosition(visibleSize.width/2, visibleSize.height/2);
this->addChild(label2);
//創建TTF標簽對象,參數為顯示文字內容、字體名稱、字體大小、標簽大小、文字水平對齊方式、文字豎直對齊方式
auto label3 = LabelTTF::create(“bottom”, “Font/consola.ttf”, 64, Size(visibleSize.width/3, 200), TextHAlignment::RIGHT, TextHAlignment::CENTER);
label3->setPosition(visibleSize.width/2, visibleSize.height/2-200);
this->addChild(label3);
}
init函數分別演示了使用三種create函數創建TTF標簽對象。運行項目,顯示如下:
LabelTTF的字體渲染效果
四.總結
本節課介紹了Cocos2d-x中最常用的字體繪制方法-LabelTTF類。
LabelTTF類專門用于繪制TTF(True Type Fonts)字體,這種類型的字體現在非常普及,游戲中絕大多數的文字都是使用LabelTTF繪制的。但是由于其渲染速度相對較慢,所以通常用于顯示游戲中的一些靜態的標簽和純文本。
LabelTTF的幾種不同構造函數可以允許開發者在創建TTF字體時指定字體文件路徑、文字大小、對齊方式等參數,同時也可以使用setPosition函數來設置該文字在屏幕坐標系下的顯示位置。
更多內容
>>本文地址:http://www.fxiong121.com/zhuanye/2022/72179.html
聲明:本站稿件版權均屬中公教育優就業所有,未經許可不得擅自轉載。
1 您的年齡
2 您的學歷
3 您更想做哪個方向的工作?