理论部分

Label类继承自Node类,中文翻译文字与字体,通常在应用开发中为模块作为提示和描述的作用,主要有3中不同的创建方式。

1.通过ttf字体包创建,通过指定本地已有的ttf格式的字体文件,创建Label。

  • 优点:这种字体格式一般就是网上字体库下载下来的格式,往往对一种语言的文字支持比较全面,可以随意设置字体的大小。
  • 缺点:一个字体ttf支持的文字较多,导致了体积庞大,字体描绘的效率低,不适合更新频繁的Label使用。

2.通过fnt格式文件创建,通过指定本地已有的fnt格式的文件,创建Label,fnt的文件可以由ttf字体库文件通过BMFont工具转换过来,原理就是我们根据实际需要的文字信息从ttf字体库中选取这部分文字字形出来,给他们创建一个纹理图集,通过创建的纹理图集和创建我们需要的文字Label。(注 .fnt文件格式都会有一个同名的纹理图集.png)

  • 优点:效率高,自由度高。
  • 缺点:字形支持不多,不可以设置字体大小。

3.通过设定字形图集来创建文字Label,图集要求每一个字形占据的空间都是等宽等高,并记录下这些宽高的具体数据,这种创建一般都是字形很少的情况下,如0...9, a...z, A...Z。

代码部分

静态创建API

基于平台相关的API创建和初始化一个文本。

static Label* createWithSystemFont(const std::string & text,  //最始文本内容。
                   const std::string & font,  //一个字体文件或字体名称。
                   float fontSize,  //字体大小。这个值必须大于0。
                   const Size & dimensions = Size::ZERO,  //文本的内容大小。
                   TextHAlignment hAlignment = TextHAlignment::LEFT,  //水平对齐方式。
                   TextVAlignment vAlignment = TextVAlignment::TOP)  //垂直对齐方式。

实例:

auto label = Label::createWithSystemFont("Cocos2d-x Label Test", "arial", ); //arial=字体名称
auto labelA = Label::createWithSystemFont("create label with system font", "fonts/arial.ttf", ); //fonts/arial.ttf=字体文件
auto label = Label::createWithSystemFont("Hello World!", "fonts/arial.ttf", , Size(,)); //Size(30,100)=文本大小

使用FreeType2库创建和初始化一个文本。

static Label* createWithTTF(const std::string & text,  //最初文本内容。
               const std::string & fontFilePath,  //一个TTF字体文件。
               float fontSize,  //字体大小。这个值必须大于0。
               const Size & dimensions = Size::ZERO,  //文本的内容大小
               TextHAlignment hAlignment = TextHAlignment::LEFT,  //水平对齐方式。
               TextVAlignment vAlignment = TextVAlignment::TOP)  //垂直对齐方式

实例:

auto label = Label::createWithTTF("create label with TTF", "fonts/arial.ttf", );

使用FreeType2库创建和初始化一个文本

static Label* createWithTTF(const TTFConfig & ttfConfig,  //一个TTFConfig对象实例。
               const std::string & text,  //最初文本内容。
               TextHAlignment hAlignment = TextHAlignment::LEFT,  //水平对齐方式
               int maxLineWidth = )  //最大线宽

实例:

TTFConfig ttfConfig("fonts/arial.ttf", );
auto label = Label::createWithTTF(ttfConfig,"label text", TextHAlignment::CENTER);

使用位图字体文件创建和初始化一个文本。

static Label* createWithBMFont(const std::string & bmfontPath,  //一个位图字体文件,它是FNT格式。
                 const std::string & text,  //初始文本内容。
                 const TextHAlignment & hAlignment = TextHAlignment::LEFT,  //水平对齐方式。
                 int maxLineWidth = ,  //最大线宽
                 const Vec2 & imageOffset = Vec2::ZERO)  //第一个字符的在位图文件中的偏移。

实例:

auto label = Label::createWithBMFont("fonts/bitmapFontTest2.fnt", "Test");

使用字符映射文件来创建和初始化一个文本。

static Label* createWithCharMap    (const std::string & plistFile)      //一个字符映射的配置文件

实例:

auto label = Label::createWithCharMap("fonts/tuffy_bold_italic-charmap.plist");

Public API

virtual void removeAllChildrenWithCleanup(bool cleanup) override
从容器中删除所有的子节点, 取决于cleanup参数,同时可能会清除所有的活动的动作。

virtual void removeChild(Node *child, bool cleanup=true) override
从容器中删除一个节点,取决于cleanup参数,同时可能会清除所有的活动的动作。

virtual const Size & getContentSize() const override
返回节点未变形状态下的大小。

virtual void setString(const std::string &text) override
设置文本显示的字符串。

virtual const std::string & getString() const override
返回文本显示的字符串。

int getStringLength()
获取字符串的长度

virtual void setTextColor(const Color4B &color)
设置文本的字符串的颜色。

const Color4B & getTextColor() const
返回文本的字符串的颜色。

void setAlignment(TextHAlignment hAlignment)
设置文本的水平对齐。

TextHAlignment getTextAlignment() const
获取文本的对齐方式。

void setVerticalAlignment(TextVAlignment vAlignment)
设置文本垂直对齐。

TextVAlignment getVerticalAlignment() const
返回文本垂直对齐。

void setAlignment(TextHAlignment hAlignment, TextVAlignment vAlignment)
设置文本的水平和垂直对齐方式。

void setLineBreakWithoutSpace(bool breakWithoutSpace)
指定当文本太长时,是否需要换行。

void setMaxLineWidth(float maxLineWidth)
设置文本的最大行宽。 如果文本的行宽不等于零的话,那么它可以用来强制换行。

float getMaxLineWidth()
获取文本的最大行宽

void setWidth(float width)
设置文本的行宽

float getWidth() const
返回文本的行宽

void setHeight(float height)
设置文本的行高

float getHeight() const
返回文本的行高

int getStringNumLines()
获取文本显示的行数。

virtual void enableShadow(const Color4B &shadowColor=Color4B::BLACK, const Size &offset=Size(2,-2), int blurRadius=0)
激活文本的阴影效果

virtual void enableOutline(const Color4B &outlineColor, int outlineSize=-1)
激活文本的描边效果。

virtual void enableGlow(const Color4B &glowColor)
激活文本的发光效果

virtual void disableEffect()
禁用所有文本特效。

virtual void disableEffect(LabelEffect effect)
禁用文本特效。

void setHorizontalAlignment(TextHAlignment hAlignment)
设置文本的水平对齐。

TextHAlignment getHorizontalAlignment() const
返回文本的水平对齐。

void setLineHeight(float height)
设置文本的行高。

float getLineHeight() const
返回这个文本的行高。

void setAdditionalKerning(float space)
设置文本的字符间距。

float getAdditionalKerning() const
返回文本的字符间距

void setDimensions(float width, float height)
更高效地设置文本大小的方法。这个大小是未进行坐标变换的大小。

const Size & getDimensions() const
获取文本的大小

virtual void updateContent()
立即更新文本内容。

virtual Sprite * getLetter(int lettetIndex)
提供了一种方法,可以把每个字符当作精灵来看待。

void setClipMarginEnabled(bool clipEnabled)
设置是否裁剪文本上下边距,主要用来减少文本的调试。

bool isClipMarginEnabled() const
判断文本是否裁剪上下边距

FontAtlas * getFontAtlas()
返回一个FontAtlas对象指针

virtual std::string getDescription() const override
得到描述性的字符串。这将会使得调试更加简单。

virtual Rect getBoundingBox() const override
返回父坐标系中的一个AABB(轴向包围外框)。

virtual void visit(Renderer *renderer, const Mat4 &parentTransform, uint32_t parentFlags) override
遍历所有子节点,并且循环递归得发送它们的渲染指令。

virtual void draw(Renderer *renderer, const Mat4 &transform, uint32_t flags) override
重写这个方法来绘制你自己的节点。 以下的GL状态是默认开启的:

virtual void setGlobalZOrder(float globalZOrder) override
定义渲染节点的顺序 拥有全局Z顺序越小的节点,最先渲染

cocos代码研究(2)Label学习笔记的更多相关文章

  1. cocos代码研究(1)Node学习笔记

    理论部分 Node类继承自Ref类,是cocos框架中基础底层的一个封装类,与画面渲染相关的类一般都是继承自该类,例如Scene,Layer,Sprite,Sprite3D,Label,SpriteB ...

  2. cocos代码研究(5)Action学习笔记

    理论部分 Action类也是cocos核心基础类之一,在游戏中起着非常重要的作用,继承自Ref,被 FiniteTimeAction(有限时间动作), Follow , 以及 Speed 继承. 有限 ...

  3. cocos代码研究(14)Widget子类Button学习笔记

    理论基础 表示一个按钮组件. 按钮可以被按下,或者点击, 并且在按下或者点击之后,可以由用户指定一个动作来执行,继承自 Widget. 代码部分 static Button * create ()创建 ...

  4. cocos代码研究(12)UI之Widget学习笔记

    理论基础 Widget类,所有UI控件的基类. 这类继承自ProtectedNode和LayoutParameterProtocol. 如果你想实现自己的UI控件,你应该继承这个类. 被 VideoP ...

  5. cocos代码研究(24)Widget子类PageView学习笔记

    理论基础 PageView类又称Layout的管理器,可以让用户在多个Layout之间左右或者上下切换显示,继承自 Layout . 代码实践 static PageView * create ()创 ...

  6. cocos代码研究(21)Widget子类TextField学习笔记

    基础理论 一个接受用户输入的widget. 输入文本的渲染基于TextFieldTTF. 如果你想用系统控制行为,请使用EditBox来替代.继承自 Widget. 代码实践 //与占位符有关void ...

  7. cocos代码研究(7)即时动作子类学习笔记

    理论部分 即时动作是会立即被执行的动作.他们没有持续时间动作(ActionInterval)的持续时间属性.继承自 FiniteTimeAction.被 CallFunc, FlipX, FlipY, ...

  8. cocos代码研究(6)有限时间动作类(FiniteTimeAction)学习笔记

    理论部分 有限时间动作类继承自Action类,被 ActionInstant(即时动作) , 以及 ActionInterval(持续动作) 继承. 即时动作是会立即被执行的动作,被 CallFunc ...

  9. cocos代码研究(17)Widget子类RadioButtonGroup学习笔记

    理论基础 RadioButtonGroup可以把指定的单选按钮组织起来, 形成一个组, 使它们彼此交互. 在一个RadioButtonGroup, 有且只有一个或者没有RadioButton可以处于被 ...

随机推荐

  1. Android studio修改字体(font)大小(size)

    Android Studio 默认编辑器(Editor)的方案(Scheme)是无法修改字体的, 可以Save as, 保存为新的方案(Scheme), 然后更改字体大小; 位置: File-> ...

  2. LeetCode 12 Integer to Roman (整数转罗马数字)

    题目链接: https://leetcode.com/problems/integer-to-roman/?tab=Description   String M[] = {"", ...

  3. echarts中关于自定义legend图例文字

    formatter有两种形式: - 模板 - 回调函数 模板 使用字符串模板,模板变量为图例名称 {name} formatter: 'Legend {name}' 回调函数 formatter: f ...

  4. VS2003安装Opencv1.0 windows系统 win7

    一.步骤 下载安装opencv1.0     安装文件我上传到百度网盘分享连接 http://pan.baidu.com/s/1o8na0aA 配置电脑windows环境变量 配置VS2003全局设置 ...

  5. ElasticSearch 聚合函数

    一.简单聚合 桶 :简单来说就是满足特定条件的文档的集合. 指标:大多数 指标 是简单的数学运算(例如最小值.平均值.最大值,还有汇总),这些是通过文档的值来计算. 桶能让我们划分文档到有意义的集合, ...

  6. [LintCode] Invert Binary Tree 翻转二叉树

    Given n points on a 2D plane, find the maximum number of points that lie on the same straight line. ...

  7. Oracle创建测试表

    试中文排序的数据库版本: SQL> select * from v$version; BANNER ----------------------------------------------- ...

  8. poj2778 DNA Sequence【AC自动机】【矩阵快速幂】

    DNA Sequence Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 19991   Accepted: 7603 Des ...

  9. POJ 1185 - 炮兵阵地 & HDU 4539 - 郑厂长系列故事——排兵布阵 - [状压DP]

    印象中这道题好像我曾经肝过,但是没肝出来,现在肝出来了也挺开心的 题目链接:http://poj.org/problem?id=1185 Time Limit: 2000MS Memory Limit ...

  10. iOS-相关集合类

    第一:NSArrary 1.1:集合的基本方法 1.创建集合   NSArray 是不可变数组,一旦创建完成就不能够对数组进行,添加,删除等操作 NSArray * array = [[NSArray ...