cocos2dx lable字体加粗cocos2dx 3.0版本之前,我们一直都是用CCLabelTTF,CCLabelBMFont,CCLabelAtlas来创建文本标签,但是!3.0版本放出来后...看到这里你心里是不是又颤抖了一下?别害怕嘛,我要说的是:3.0版本出来后这些标签也都是还可以用的啦,只是说我们有了更好的选择。
cocos2dx3.0添加了一种新的文本标签,这种标签不同的地方有:使用freetype来使它在不同的平台上有相同的视觉效果;由于使用更快的缓存代理,它的渲染也将更加快速;同时它还提供了绘边、阴影等特性。
所以因为Label,我决定离开LabelTTF和LabelBMFont(这个开头你猜到了么?)
---------------------------------------------------
常用的接口一览(因为很多接口都与LabelTTFT等一样,所以就列一些我所了解的“异类”)

//创建普通的文本标签,效果和CCLabelTTF::create(...);一样。TTFConfig是什么?下面会介绍
staticLabel * create(conststd::string& text,conststd::string& fontName,floatfontSize,
       constSize& dimensions = Size::ZERO, TextHAlignment hAlignment = TextHAlignment::LEFT,
       TextVAlignment vAlignment = TextVAlignment::TOP);
//通过读取TTFConfig配置的方式创建标签,
staticLabel* createWithTTF(constTTFConfig& ttfConfig,conststd::string& text, TextHAlignment alignment = TextHAlignment::LEFT,intlineWidth = 0);
//使用.fnt的方式创建标签,类似CCLabelBMFont:create();    
staticLabel* createWithBMFont(conststd::string& bmfontFilePath,conststd::string& text,
       constTextHAlignment& alignment = TextHAlignment::LEFT,intlineWidth = 0, 
       constPoint& imageOffset = Point::ZERO);
//使用.png的方式创建标签,类似CCLabelAtlas::create();
staticLabel * createWithCharMap(conststd::string& charMapFile,intitemWidth,intitemHeight,intstartCharMap);
virtualvoidenableShadow(constColor3B& shadowColor = Color3B::BLACK,constSize &offset = Size(2,-2),floatopacity = 0.75f,intblurRadius = 0);
virtualvoidenableOutline(constColor4B& outlineColor,intoutlineSize = -1);
//只支持TTF
virtualvoidenableGlow(constColor3B& glowColor);
//只支持 TTF 
virtualvoiddisableEffect();
//取消所有特效
//特效的种类有一下四种:
enumclassLabelEffect {
	NORMAL,//普通标签(纯粹的、脱离了低级趣味的label)
	OUTLINE,//文艺标签(有描边)
	SHADOW,//2B标签  (有阴影)
	GLOW//土豪标签(有荧光)
};

稍微提一下一个新东西:TTFConfig

//TTFConfig 是一個結構體,裡面包含了你要創建一個ttf的label常用配置,如下所示
typedef struct _ttfConfig
{
    std::string fontFilePath;   //文件路徑
    int fontSize;			    //字體大小,默認12
    GlyphCollection glyphs;     //使用的字符集,默認DYNAMIC
    const char *customGlyphs;   //呵呵
    bool distanceFieldEnabled;  //我對這個的理解是:是否讓文字顯得緊湊?默認為false
	int outlineSize;		 	//字體描邊的大小,默認為0
    
	//構造函數
    ...
	//注意:當outlineSize初始化的值大於0時,distanceFieldEnabled則為false
}TTFConfig;

//GlyphCollection有四種類型:
enum class GlyphCollection {
    
    DYNAMIC,
    NEHE,
    ASCII,
    CUSTOM
};

下面简单介绍Label的用法
1、使用.ttf
1)创建

TTFConfig config2("fonts/Marker Felt.ttf",30);//初始化TTFConfig,第一個參數為字庫的路徑,第二個參數為字體大小
auto label2 = Label::createWithTTF(config2,"createWithTTF",TextHAlignment::LEFT);//創建label,並向左對其
label2->setPosition(Point(visibleSize.width/2,300));
label2->setAnchorPoint(Point::ANCHOR_MIDDLE);//設置錨點居中
this->addChild(label2,2);

当然了,也可以用Label创建普通的标签,效果和用CCLabelTTF::create()的一样

auto label4 = Label::create("create","Marker Felt",30);//

效果如图所示:

2)另字体看起来紧凑点,也就是设置distanceFieldEnabled = true
直接修改config里的distanceFieldEnabled,方式如下:

TTFConfig config2("fonts/Marker Felt.ttf",30,GlyphCollection::DYNAMIC,nullptr,true);//修改config

3)设置glow(荧光)效果,(我也不知道该怎么描述glow这词...)

label2->enableGlow(Color3B::GREEN);//熒光顏色為綠色
效果如图所示。这里有个地方要注意下,想要显示荧光效果,必须令distanceFieldEnabled = true,否则看不到效果。

4)设置描边
label2->enableOutline(Color4B(255,125,0,255),8);//第一個參數為描邊的顏色,第二個參數為描邊的大小
效果如图所示。注意,使用描边效果后,distanceFieldEnabled 将变成 false,这也意味着在有描边的情况下是显示不了荧光效果的(我想太多了...)

5)设置阴影
label2->enableShadow(Color3B::RED,Size(2,-2),0.2,0.5);//第一個參數為陰影顏色,第二個參數為陰影相對於


2、使用.fnt 的label
1)创建
auto label3 = Label::createWithBMFont("fonts/bitmapFontTest.fnt", "createWithBMFont");
label3->setPosition(Point(visibleSize.width/2,250));
label3->setAnchorPoint(Point::ANCHOR_MIDDLE);
this->addChild(label3,2);
label3->enableShadow();


2)设置阴影(描边和荧光只能用在.ttf 上)
label3->enableShadow(Color3B::RED);
效果如图,可以与上图对比一下。

3、使用.png
加入我们有这么一张图,使用方法如下:


1)创建
auto label4= Label::createWithCharMap("fonts/costFont.png",30,44,'/');//参数分别为:路径;每个字符的宽和高,起始字符
label4->setPosition(Point(visibleSize.width/2,200));
label4->setAnchorPoint(Point::ANCHOR_MIDDLE);
label4->setString("10");//设置显示的内容为”10“this->addChild(label4,2);

2)设置阴影
label4->enableShadow(Color3B::RED);

4、取消所有特效
label->disableEffect();//取消所有特效
恩,就介绍到这里。