Cocos2d-x-3.0中改进的标签

在cocos2dx 3.0发布之前,有CCLabelTTF, CCLabelBMFont和CCLabelAtlas三种文本标签。

cocos2dx 3.0添加了一种新的文本标签。这种标签通过使用freetype来使它在不同的平台上有相同的视觉效果。由于使用更快的缓存代理,它的渲染也将更加快速。你将可以LabelTTF和LabelBMFont放一边如果你使用新的文本标签,因为它同时还提供了绘边、阴影等特性。

变动:

1.去掉类、结构体和宏的CC前缀。去掉诸如m、p等的匈奴利命名规则;

2.将成员函数的某些参数和返回值改掉。例如将char改成string, unisigned int改成long等;

3.改掉一些枚举类型的命名和属性值;

4.添加常量修饰到某些成员函数上,如float getFontSize() const;提升程序的鲁棒(为啥不叫撸管子呢)性

旧版的CCLabel的一些近似的改变

1.继承关系的比较

在3.0版本中,所有的类都移除掉CC前缀,同时也删除了CCCopty类,如:

  

PS:如果没理解错的话,官网这两个图的脚注是弄反了,自己擅自都它们改了过来,哈哈。

2.水平对齐和垂直对齐的定义改变了

在 v2.x版本中:

static CCLabelTTF * create(const char *string, const char *fontName, float fontSize,
                                     const CCSize& dimensions, CCTextAlignment hAlignment, 
                                     CCVerticalTextAlignment vAlignment);
而在v3.0的版本中则是:
    static LabelTTF * create(const std::string& string, const std::string& fontName, float fontSize,
                                   const Size& dimensions, TextHAlignment hAlignment,
                                   TextVAlignment vAlignment);
从以上的例子可以看出更新版本中函数字义的变化

首先就是不再使用CC前缀。

然后就是char数组改成string类型(string类型相对来说更加高级并且便于使用,而char数组虽然有效率,但也更容易出错)。

另外,最后两个参数的类型也改变了(文件的水平和垂直对齐方式)。不过它们的效果与前一个版本大致相同,只有名字按下列的方式改变了:

 cocos2d-x-2.xcocos2d-x-3.x
horizontal alignmenttypedef enum{kCCTextAlignmentLeft,kCCTextAlignmentCenter,kCCTextAlignmentRight,} CCTextAlignment;enum class TextHAlignment{LEFT,CENTER,RIGHT};
vertical alignmenttypedef enum{kCCVerticalTextAlignmentTop, kCCVerticalTextAlignmentCenter,kCCVerticalTextAlignmentBottom,} CCVerticalTextAlignment;enum class TextVAlignment{TOP,CENTER,BOTTOM};
旧版本的CCLabel的其它变化:

LabelBMFont移除了现在的函数

CCBMFontConfiguration* getConfiguration() const;
在v3.0版本中不能再使用这个函数来获得配置信息(FNT文件的配置属性了)。

拓展

新的标签类

先看一看标签类的继承图:



上面的图表中,LabelTextFormatProtocal也是一个新的类,它类似于LabelProtocol,它们都是提供存取字符串的纯虚基类。

下面是继承图:

 

Label类中的静态成员函数:

    static Label* createWithTTF(const std::string& label, const std::string& fontFilePath, int fontSize, int lineSize = 0, TextHAlignment alignment = TextHAlignment::CENTER, GlyphCollection glyphs = GlyphCollection::NEHE, const char *customGlyphs = 0);    
    static Label* createWithBMFont(const std::string& label, const std::string& bmfontFilePath, TextHAlignment alignment = TextHAlignment::CENTER, int lineSize = 0);
CreateWithTTF()用于直接通过TTF文件创建标签。

它创建标签的方法和创建LabelTTF相似。唯一的不同是后者是用字体名来创建标签,而前者则直接使用ttf文件来创建。

下面代码分别使用两种方法来创建LabelTTF和Label:

    auto label1 = LabelTTF::create("Creating label through LabelTTF class by file name", "myFontName", 24);
    label1->setPosition(Point(origin.x, origin.y + visibleSize.height - label1->getContentSize().height));
    label1->setAnchorPoint(Point(0.0f, 0.0f));
    this->addChild(label1);

    auto label2 = Label::createWithTTF("Create label through Label class by .ttf file","fonts/myFontName.ttf", 32);
    label2->setPosition(Point(origin.x, origin.y + visibleSize.height - 80));
    label2->setAlignment(TextHAlignment::LEFT);
    label2->setAnchorPoint(Point(0.0f, 0.0f));
    this->addChild(label2);
运行程序你将得到类似下图的结果:


LabelTTF类是使用系统的字体来生成的。

可以使用下面的方法来设置文本的对齐方法:

    label2->setAlignment(TextHAlignment::LEFT);   //Set the text level alignment is aligned to the left
CreateWithBMFont()通过FNT文件来创建标签,它类似于LabelBMFont。下面的代码段用不同的方法创建LabelBMFont和Label:

    auto label3 = LabelBMFont::create("Create label through LabelBMFont class by .fnt file", "fonts/helvetica-32.fnt");
    label3->setAnchorPoint(Point(0.0f, 0.0f));
    label3->setPosition(Point(origin.x, origin.y + visibleSize.height - 120));
    addChild(label3);

    auto label4 = Label::createWithBMFont("Create label through Label class by .fnt file", "fonts/konqa32.fnt");
    label4->setAnchorPoint(Point(0.0f, 0.0f));
    label4->setPosition(Point(origin.x, origin.y + visibleSize.height - 160));
    addChild(label4 );
运行结果类似于:


使用LabelBMFont类,相关的字体文件(包括.png文件和.fnt文件)必须添加到项目中。Label类也一样。

.fnt文件包括了相关图片文件的名字、编码、座标轴、各字符的长宽。

你可以像下面的代码一样调用成员函数来改变label4的一些属性:

    auto size = label4->getLabelContentSize();
    CCLOG("Label content size: %.2fx%.2f", size.width, size.height);
    auto lineWidth = label4->getMaxLineWidth();
    CCLOG("lineWidth: %.2f", lineWidth);
    auto s = label4->getStringLenght();
    CCLOG("string lenght:%.2f", s);
    label4->setScale(2.0f);                         //Changes both X and Y scale factor of the label4
    label4->setColor(Color3B::GREEN);               //Changes the color
    label4->setOpacity(127);                        //Changes the opacity. 
    auto CChar = (Sprite*)label4->getLetter(0);     //get the frist letter of label, each letter of the label can be treated like an CCSprite.
    auto jump = JumpBy::create(0.5f, Point::ZERO, 60, 1);
    auto jump_4ever = RepeatForever::create(jump);
    CChar->runAction(jump_4ever);
运行程序观察不同:




PS:自己翻译给自己看的,请不要吐槽翻译得太烂,个人觉得比较机器翻译得好

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值