cocos代码研究(2)Label学习笔记

时间:2022-11-16 09:16:48

理论部分

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. js兼容性

    1.getElementByClassName 在使用原生JavaScript时,获取类选择符时,即使用getElementByClassName,它在Firefox和IE下是不能兼容. Firefo ...

  2. 介绍kali下的一些小工具

    1.macchanger 可以用来修改你的mac地址

  3. spring-boot启动debug信息中non-fatal error解决

    java.lang.ClassNotFoundException: org.springframework.data.web.config.EnableSpringDataWebSupport添加依赖 ...

  4. javascript继承--原型链的 继承

    作者的话:原型链是JavaScript中相当重要的一个知识点,这里我使用了函数结构图,来帮助我更好的理解 /* 原型链继承方式: 通过改变一个对象的原型对象的指向来继承另一个对象 原理: 我们知道,一 ...

  5. TypeScript学习笔记之接口类型

    TypeScript的接口,个人理解就是一种约束,包括各种类型的契约或者代码定义上的契约.当然,和java中的用法基本一致,接口可以被继承也可以被实现. 定义一个简单的interface interf ...

  6. Oracle_高级功能(6) 分区

    oracle分区表1.分区表: 当表中的数据量不断增大,查询数据的速度就会变慢,应用程序的性能就会下降,这时就应该考虑对表进行分区. 表进行分区后,逻辑上表仍然是一张完整的表,只是将表中的数据在物理上 ...

  7. sql assist字符匹配智能提示

  8. hdu 6020 MG loves apple 恶心模拟

    题目链接:点击传送 MG loves apple Time Limit: 3000/1500 MS (Java/Others)    Memory Limit: 262144/262144 K (Ja ...

  9. iOS --高仿QQ空间页面

    1.首先分析一下qq空间页面的主要2个功能: 1)随着TableView的向上滑动导航栏的颜色渐变,变化过程是从透明变成白色. 2)随着TableView的向下滑动,图片随着offset放大. 2.首 ...

  10. 九度oj 题目1552:座位问题

    题目描述: 计算机学院的男生和女生共n个人要坐成一排玩游戏,因为计算机的女生都非常害羞,男生又很主动,所以活动的组织者要求在任何时候,一个女生的左边或者右边至少有一个女生,即每个女生均不会只与男生相邻 ...