遊戲場景中的文字标簽包括靜态文字與動态文字,其中動态文字為美工在制作圖檔資源時就已經添加上去的文字,因為是圖檔的一部分,具有很強的随意性,可以是各種各樣的文字,但是這種文字也是我們在程式裡所不能修改的,動态文字則是我們可以在程式中進行控制的,而cocos2d-x一般是通過标簽來實作。
cocos2d-x的标簽類主要有三種:LabelTTF、LabAtlas和LabelBMFont,在3.0及以上的版本中,又推出了新的标簽類Label。
1.LabelTTF:使用系統中的字型,繼承關系如圖。
如圖所示,LabelTTF繼承了Node類,具有節點的基本特性,同時也實作了LabelProtocol接口
示例代碼如下:
auto label = LabelTTF::create("我是LabelTTF", "Arial", TITLE_FONT_SIZE);
// position the label on the center of the screen
label->setPosition(Point(origin.x + visibleSize.width/,
origin.y + visibleSize.height - label->getContentSize().height));
// add the label as a child to this layer
this->addChild(label, );
運作結果:
繼續檢視LabelTTF::create函數的源代碼發現
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);
發現create函數其實有6個參數,如果我們不設定則會有預設值,代表着标簽的一些屬性,例如位置資訊之類的。
2.LabelAtlas:圖檔标簽屬性
這種标簽顯示的文字是從一個圖檔集中取出來的,是以需要加載圖檔集檔案,LabelAtlas中的每個字元必須有固定的高度和寬度
LabelAtlas的運作效率比LabelTTF要快很多。
同樣是繼承了Node類,下面來實作一個例子:
auto labe1 = LabelAtlas::create("123 Test", "ttuffy_bold_italic-charmap.png",,,' ');
addChild(labe1, );
labe1->setPosition(Point(, ));
labe1->setOpacity(); //設定透明度
// add the label as a child to this layer
this->addChild(labe1);
//參數以此為,要寫的标簽文字、字型檔案、字型寬、高、起始字元
3.LabelBMFont:位圖字型标簽
使用位圖示簽類需要一個圖檔集(.png)和一個字元坐标檔案(.fnt)
LabelBMFont中的每個字型寬度是可變的,LabelAtlas的運作效率比LabelTTF要快很多。類圖如下所示
示例如下:
auto labe1 = LabelBMFont::create("HelloWorld", "fonts/BMFont.fnt");
addChild(labe1, );
labe1->setPosition(Point(, ));
labe1->setOpacity(); //設定透明度
4.Label 提供了更豐富的視覺效果
類圖如下:
建立函數主要有一下幾個
示例代碼:
auto label1 = Label::create();
label1->setString("Default Font");
label1->setPosition( Point(size.width/, size.height * ) );
addChild(label1);
auto label3 = Label::createWithSystemFont("Marker Felt","Marker Felt",);
label3->setPosition( Point(size.width/, size.height * ) );
addChild(label3);