天天看點

cocos2d-x-3.0學習筆記之标簽類

遊戲場景中的文字标簽包括靜态文字與動态文字,其中動态文字為美工在制作圖檔資源時就已經添加上去的文字,因為是圖檔的一部分,具有很強的随意性,可以是各種各樣的文字,但是這種文字也是我們在程式裡所不能修改的,動态文字則是我們可以在程式中進行控制的,而cocos2d-x一般是通過标簽來實作。

cocos2d-x的标簽類主要有三種:LabelTTF、LabAtlas和LabelBMFont,在3.0及以上的版本中,又推出了新的标簽類Label。

1.LabelTTF:使用系統中的字型,繼承關系如圖。

cocos2d-x-3.0學習筆記之标簽類

如圖所示,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, );
           

運作結果:

cocos2d-x-3.0學習筆記之标簽類

繼續檢視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要快很多。

cocos2d-x-3.0學習筆記之标簽類

同樣是繼承了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要快很多。類圖如下所示

cocos2d-x-3.0學習筆記之标簽類

示例如下:

auto labe1 = LabelBMFont::create("HelloWorld", "fonts/BMFont.fnt");
    addChild(labe1, );
    labe1->setPosition(Point(, ));
    labe1->setOpacity(); //設定透明度
           

4.Label 提供了更豐富的視覺效果

類圖如下:

cocos2d-x-3.0學習筆記之标簽類

建立函數主要有一下幾個

cocos2d-x-3.0學習筆記之标簽類

示例代碼:

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);