2016年3月31日 星期四

20160331_cocos2dx[3.2]新字體標籤Label


http://shahdza.blog.51cto.com/2410787/1560612

【嘮叨】
    在3.x中,廢棄了2.x裡的LabelTTFLabelAtlasLabelBMFont三個字體類,取而代之的是全新的字體標籤Label
    實際上Label是將三個字體類進行了融合,進行統一的管理與渲染,這使得創建字體標籤Label的方式更加統一,更加方便。
    本節來學習一下3.x中新的標籤類Label,如果對2.x中的三個字體類不瞭解的話,建議先去看看那三個類的用法,再來學習本節內容,能夠更好的理解。
    2.x中的舊標籤類,請移步:http://shahdza.blog.51cto.com/2410787/1541002

【致謝】

【本節內容】
    在3.x中,Label支持四種方式的標籤創建。並新增了陰影Shadow、輪廓Outline、發光Glow效果的支持。還支持文字內容的行間距、文字間距、自動換行的設置。
    > 創建系統原生字體API : createWithSystemFont
    > 創建TTF             : createWithTTF       (原LabelTTF)
    > 創建CharMap         : createWithCharMap   (原LabelAtlas)
    > 創建BMFont          : createWithBMFont    (原LabelBMFont)

    > Label的屬性與方法
    > 文字效果渲染        : Shadow、Outline、Glow
    > 對齊方式            : TextHAlignment、TextVAlignment
    > Label的尺寸大小
    > 自動換行
    > 行間距、文字間距
    > 單獨設置某個字符

    關於圖片資源,請在cocos2dx給出的官方樣例cpp-tests中尋找。


【createWithSystemFont】
    創建系統原生字體的API。
    創建方式如下:
1
2
3
4
5
6
7
8
9
10
//
    static Label* createWithSystemFont(
        const std::string& text,                          //字符串內容
        const std::string& font,                          //字體(字體名稱、或字體文件)
        float fontSize,                                   //字號                           
        const Size& dimensions = Size::ZERO,              //label的尺寸大小,默認不設置尺寸
        TextHAlignment hAlignment = TextHAlignment::LEFT, //水平對齊方式,默認左對齊::LEFT
        TextVAlignment vAlignment = TextVAlignment::TOP   //垂直對齊方式,默認頂部  ::TOP
    );
//
    使用舉例:
1
2
3
4
//
    //使用系統的字體名稱 "Arial" 來創建
    Label* lb1 = Label::createWithSystemFont("123abc""Arial", 24);
//


【createWithTTF】
    創建TTF的方式有以下兩種:
    > 方式一:與2.x中LabelTTF的創建類似,不過使用的fontFile必須為字體文件。
    > 方式二:通過TTF的配置信息數據結構TTFConfig來創建。

1、方式一:與System Font創建類似
    註:區別在於fontFile必須為字體文件(如"*.ttf"),即不支持使用系統字體名稱來創建。
1
2
3
4
5
6
7
8
9
10
//
    static Label* createWithTTF(
        const std::string& text,
        const std::string& fontFile, //必須為字體文件(如"*.ttf")
        float fontSize,
        const Size& dimensions = Size::ZERO,
        TextHAlignment hAlignment = TextHAlignment::LEFT,
        TextVAlignment vAlignment = TextVAlignment::TOP
    );
//

2、方式二:通過TTFConfig配置來創建

  2.1、TTFConfig配置
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
//
    typedef struct _ttfConfig 
    {
        std::string fontFilePath;  //字體文件路徑,如 "fonts/Arial.ttf"
        int fontSize;              //字體大小,默認"12"
        GlyphCollection glyphs;    //使用的字符集,默認"DYNAMIC"
        const char *customGlyphs;
        bool distanceFieldEnabled; //是否讓字體緊湊,默認false
        int outlineSize;           //字體輪廓大小,默認"0"
         
        //構造函數
        _ttfConfig(
            const char* filePath = "",
            int size = 12,
            const GlyphCollection& glyphCollection = GlyphCollection::DYNAMIC,
            const char *customGlyphCollection = nullptr,
            bool useDistanceField = false,
            int outline = 0
        );
    }TTFConfig;
//

  2.2、使用TTFConfig創建TTF
1
2
3
4
5
6
7
8
//
    static Label* createWithTTF(
        const TTFConfig& ttfConfig, //TTFConfig配置
        const std::string& text,    //字符串內容
        TextHAlignment alignment = TextHAlignment::LEFT,
        int maxLineWidth = 0        //最大文本行寬,0表示不設置。可用於自動換行只用
    );
//
    使用舉例:


1
2
3
4
5
6
7
8
9
10
11
12
//
    TTFConfig ttfConfig;
    ttfConfig.fontFilePath = "fonts/Marker Felt.ttf"//必須配置
    ttfConfig.fontSize = 12;
    ttfConfig.distanceFieldEnabled = false;
    ttfConfig.outlineSize = 0;
    ttfConfig.glyphs = GlyphCollection::DYNAMIC;
    ttfConfig.customGlyphs = nullptr;
     
    //使用TTFConfig配置,來創建TTF
    Label* lb3 = Label::createWithTTF(ttfConfig, "123abc");
//

沒有留言:

張貼留言

cocos2dx-lua 建立滑鼠監聽

重要關鍵字  EVENT_MOUSE_SCROLL addEventListenerWithSceneGraphPriority      if IsPc() then --建立滑鼠監聽         local listener = cc.EventListenerMouse...