cocos2dx3.0添加了一种新的文本标签,这种标签不同的地方有:使用freetype来使它在不同的平台上有相同的视觉效果;由于使用更快的缓存代理,它的渲染也将更加快速;同时它还提供了绘边、阴影等特性。所以因为Label,我决定离开abelTTF和LabelBMFont

 

常用的接口一览(因为很多接口都与LabelTTFT等一样,所以就列一些我所了解的“异类”)

//创建普通的文本标签,效果和CCLabelTTF::create(...);一样。TTFConfig是什么?下面会介绍
static Label * create(const std::string& text, const std::string& fontName, float fontSize,
const Size& dimensions = Size::ZERO, TextHAlignment hAlignment = TextHAlignment::LEFT,
TextVAlignment vAlignment = TextVAlignment::TOP); //通过读取TTFConfig配置的方式创建标签,
static Label* createWithTTF(const TTFConfig& ttfConfig, const std::string& text, TextHAlignment alignment = TextHAlignment::LEFT, int lineWidth = ); //使用.fnt的方式创建标签,类似CCLabelBMFont:create();
static Label* createWithBMFont(const std::string& bmfontFilePath, const std::string& text,
const TextHAlignment& alignment = TextHAlignment::LEFT, int lineWidth = ,
const Point& imageOffset = Point::ZERO); //使用.png的方式创建标签,类似CCLabelAtlas::create();
static Label * createWithCharMap(const std::string& charMapFile, int itemWidth, int itemHeight, int startCharMap); virtual void enableShadow(const Color3B& shadowColor = Color3B::BLACK,const Size &offset = Size(,-), float opacity = 0.75f, int blurRadius = );
virtual void enableOutline(const Color4B& outlineColor,int outlineSize = -); //只支持TTF
virtual void enableGlow(const Color3B& glowColor); //只支持 TTF virtual void disableEffect();//取消所有特效 //特效的种类有一下四种:
enum class LabelEffect { 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的用法

一、使用.ttf创建Label

TTFConfig config2("fonts/Marker Felt.ttf",);    //初始化TTFConfig,第一个参数为字库的路径,第二个参数为字体大小
auto label2 = Label::createWithTTF(config2,"createWithTTF",TextHAlignment::LEFT);    //创建label,并向左对其
label2->setPosition(Point(visibleSize.width/,));
label2->setAnchorPoint(Point::ANCHOR_MIDDLE);    //设置锚点居中
this->addChild(label2,);

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

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

效果如图所示:

Cocos2dx Label-LMLPHP

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

TTFConfig config2("fonts/Marker Felt.ttf",,GlyphCollection::DYNAMIC,nullptr,true);    //修改config的第五个参数为true  

Cocos2dx Label-LMLPHP

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

label2->enableGlow(Color3B::GREEN);    //荧光颜色为绿色  

效果如图所示。这里有个地方要注意下,想要显示荧光效果,必须令distanceFieldEnabled = true,否则看不到效果。

Cocos2dx Label-LMLPHP

4)设置描边

label2->enableOutline(Color4B(,,,),);    //第一个参数为描边的颜色,第二个参数为描边的大小  

效果如图所示。注意,使用描边效果后,distanceFieldEnabled 将变成 false,这也意味着在有描边的情况下是显示不了荧光效果的(我想太多了...)

Cocos2dx Label-LMLPHP

5)设置阴影

Cocos2dx Label-LMLPHP

二、使用.fnt 创建label

auto label3 = Label::createWithBMFont("fonts/bitmapFontTest.fnt","createWithBMFont");
label3->setPosition(Point(visibleSize.width/,));
label3->setAnchorPoint(Point::ANCHOR_MIDDLE);
this->addChild(label3,);
label3->enableShadow();

Cocos2dx Label-LMLPHP

(1)设置阴影(描边和荧光只能用在.ttf 上)

label3->enableShadow(Color3B::RED);  

效果如图,可以与上图对比一下。

Cocos2dx Label-LMLPHP

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

Cocos2dx Label-LMLPHP

1)创建

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

Cocos2dx Label-LMLPHP

2)设置阴影

label4->enableShadow(Color3B::RED);  

Cocos2dx Label-LMLPHP

四、取消所有特效

label->disableEffect();    //取消所有特效  
05-15 02:49