cocos代码研究(2)Label学习笔记
理论部分
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学习笔记的更多相关文章
- cocos代码研究(1)Node学习笔记
理论部分 Node类继承自Ref类,是cocos框架中基础底层的一个封装类,与画面渲染相关的类一般都是继承自该类,例如Scene,Layer,Sprite,Sprite3D,Label,SpriteB ...
- cocos代码研究(5)Action学习笔记
理论部分 Action类也是cocos核心基础类之一,在游戏中起着非常重要的作用,继承自Ref,被 FiniteTimeAction(有限时间动作), Follow , 以及 Speed 继承. 有限 ...
- cocos代码研究(14)Widget子类Button学习笔记
理论基础 表示一个按钮组件. 按钮可以被按下,或者点击, 并且在按下或者点击之后,可以由用户指定一个动作来执行,继承自 Widget. 代码部分 static Button * create ()创建 ...
- cocos代码研究(12)UI之Widget学习笔记
理论基础 Widget类,所有UI控件的基类. 这类继承自ProtectedNode和LayoutParameterProtocol. 如果你想实现自己的UI控件,你应该继承这个类. 被 VideoP ...
- cocos代码研究(24)Widget子类PageView学习笔记
理论基础 PageView类又称Layout的管理器,可以让用户在多个Layout之间左右或者上下切换显示,继承自 Layout . 代码实践 static PageView * create ()创 ...
- cocos代码研究(21)Widget子类TextField学习笔记
基础理论 一个接受用户输入的widget. 输入文本的渲染基于TextFieldTTF. 如果你想用系统控制行为,请使用EditBox来替代.继承自 Widget. 代码实践 //与占位符有关void ...
- cocos代码研究(7)即时动作子类学习笔记
理论部分 即时动作是会立即被执行的动作.他们没有持续时间动作(ActionInterval)的持续时间属性.继承自 FiniteTimeAction.被 CallFunc, FlipX, FlipY, ...
- cocos代码研究(6)有限时间动作类(FiniteTimeAction)学习笔记
理论部分 有限时间动作类继承自Action类,被 ActionInstant(即时动作) , 以及 ActionInterval(持续动作) 继承. 即时动作是会立即被执行的动作,被 CallFunc ...
- cocos代码研究(17)Widget子类RadioButtonGroup学习笔记
理论基础 RadioButtonGroup可以把指定的单选按钮组织起来, 形成一个组, 使它们彼此交互. 在一个RadioButtonGroup, 有且只有一个或者没有RadioButton可以处于被 ...
随机推荐
- Openstack Nova network
对于安装设置来说,Openstack就剩下网络这个地方比较复杂. 现在比较喜欢看图 整理了一下网络的资料 1:Nova 网络HA http://unchainyourbrain.com/opensta ...
- IOS 6 和 IOS7 UITableViewCell上添加控件的获取
假设每个cell上面都有UIButton,怎么判断哪个Cell上的按钮被按下了呢? IOS6上 -(IBAction)btnClick:(id)sender { UIButton *btn = (UI ...
- 传真AT指令部分(参考)
不知道下面的命令是不是通用的,如果有尝试过的师兄给我个回复!! 列出了您的MODEM能理解的传真 AT 命令.每个命令描述包括命令名称.解释和相关参数. 传真命令 命令 描述 +F<comman ...
- nodejs事件的监听与事件的触发
nodejs事件(Events) 一.事件机制的实现 Node.js中大部分的模块,都继承自Event模块(http://nodejs.org/docs/latest/api/events.html ...
- MONGOOSE – 让NODE.JS高效操作MONGODB(转载)
Mongoose库简而言之就是在node环境中操作MongoDB数据库的一种便捷的封装,一种对象模型工具,类似ORM,Mongoose将数据库中的数据转换为JavaScript对象以供你在应用中使用. ...
- thinkCMF----自定义配置调用
有些时候,需要在后台给网站一些其他的配置: 这个配置,一般都是通过修改代码实现的,ThinkCMF本身没有这个配置: 找到site.html 增加一个Group就可以: 在配置里面做相应的配置就可以:
- 力推:无限制下载神器aria2
百度网盘是一个非常方便的存储以及寻找资源的好帮手,但是百度为了挣钱把非会员的下载网速一再限制(无力吐槽),还还好一直使用油猴插件加idm下载神器来下载百度云文件.奈何idm对bt种子文件不支持下载,终 ...
- ECNU 3260 - 袋鼠妈妈找孩子
题目链接:http://acm.ecnu.edu.cn/problem/3260/ Time limit per test: 1.5 seconds Time limit all tests: 10. ...
- 【紫书】【重要】Not so Mobile UVA - 839 递归得漂亮
题意:判断某个天平是否平衡,输入以递归方式给出. 题解:递归着输入,顺便将当前质量作为 &参数 维护一下,顺便再把是否平衡作为返回值传回去. 坑:最后一行不能多回车 附:天秀代码 #defin ...
- Oracle核心技术之 SQL TRACE
1.SQL TRACE说明: 参数类型 布尔型 缺省值 false 参数类别 动态 取值范围 True|false 2.类型 1)sql trace参数:alter system改变对全局进程影响,如 ...