cocos2d 中加入显示文字的三种方式(CCLabelTTF 、CCLabelBMFont 和CCLabelAtlas)
在 cocos2d 中有三个类能够在层或精灵中加入文字:
- CCLabelTTF
- CCLabelBMFont
- CCLabelAtlas
CCLabelTTF
CCLabelTTF 每次调用 setString (即改变文字)的时候,一个新的OPENGL 纹理将会被创建.。这意味着setString 和创建一个新的标签一样慢。
所以,当你须要频繁的更新它们的时候,尽可能的不用去使用标签对象。 而应该使用CCLabelAtlas或者是CCLabelBMFont。
OK, 看下它的用法
CCLabelTTF *label = [CCLabelTTF labelWithString:@"the string" fontName:@"Marker Felt" fontSize:21];
[layer addChild:label];
label.position = ccp(100,100);
[label setString:@“change string”]; //改动文字的方法
这个类使用的是系统中的字体,不须要额外往项目文件里加入字体文件。但假设你有自己定义的字体也能够加到项目中,假设无法使用,能够查看一下ccConfig.h中的CC_FONT_LABEL_SUPPORT是否enable了。
CCLabelBMFont
CCLabelBMFont 相当于每次改变仅仅改变了图片坐标,而CCLabelTTF要又一次渲染.这个类使用之前,须要加入好字体文件,包含一个图片文件
(**.png) 和一个 字体坐标文件 (**.fnt)。
在 cocos2d的演示样例项目中有现成的,能够先拿过来练习一下,找的时候注意两个文件的 名称是同样的,仅仅是扩展名不同。
CCLabelBMFont *label =[CCLabelBMFont labelWithString:@"the
string" fntFile:@"konqa32-hd.fnt"];
[layer addChild:label];
label.position = ccp(100,100);
[label setString:@“change string”];
fntFile是文件名称,写扩展名是 .fnt的那个。以下是 .fnt文件的截图
...
能够看到 .fnt 文件定义了 图像文件的名称,以及每一个字符相应的位置信息。
这个没办法指定字体的字号,但能够用 scale 属性进行缩放来调整大小。就当它是sprite。
CCLabelAtlas
假设你用cocos2d项目模板创建过项目,那么你已经看过它的效果了,就是左下角显示帧率的数字。
由于帧率一直在变,使用CCLabelTTF的话效率太低,由于仅仅是数字所以也犯不上使用 CCLabelBMFont 载入那么大的文字图像,所以使用这个比較合适。
CCLabelAtlas *label = [CCLabelAtlas labelWithString:@"12" charMapFile:@"fps_images.png" itemWidth:12 itemHeight:18 startCharMap:'.'];
[layer addChild:label];
label.position = ccp(100,100);
[label setString:@“34”];
在项目文件里,在resourse group里你能够找一下一个叫 fps_images.png的这个图像文件,文件例如以下:
...
所以,这个仅仅能显示上面这个12个字符,abcd什么的就不行了。
解释一下參数,
labelWithString就是字符,
charMapFile 就是字符的图像文件(这个仅仅要图像文件就能够了),
itemWidth是每一个字符的宽度,
itemHeight是每一个字符的高度,这个不能设错,否则显示的时候可能就不正确了。
最后一个是起始字符,它是使用这个事实上字符来相应字符和图像关系的。
cocos2d 中加入显示文字的三种方式(CCLabelTTF 、CCLabelBMFont 和CCLabelAtlas)的更多相关文章
- cocos2d-x 中添加显示文字的三种方式 LabelTTF 、LabelBMFont 和 LabelAtlas
在 cocos2d-x 中有三个类可以在层或精灵中添加文字: LabelTTF LabelBMFont LabelAtlas LabelTTF 直接支持使用 TTF 字库,可以支持全部的中文,但是效率 ...
- cocos中添加显示文字的三种方式(CCLabelTTF 、CCLabelBMFont 和CCLabelAtlas)
CCLabelTTF CCLabelTTF 每次调用 setString (即改变文字)的时候,一个新的OPENGL 纹理将会被创建..这意味着setString 和创建一个新的标签一样慢. 这个类使 ...
- 在Tomcat中部署web项目的三种方式
搬瓦工搭建SS教程 SSR免费节点:http://www.xiaokeli.me 在这里介绍在Tomcat中部署web项目的三种方式: 1.部署解包的webapp目录 2.打包的war文件 3.Man ...
- Tomcat中部署web应用的三种方式
Tomcat中部署web应用的三种方式(静态部署) 第一种,针对war或解压后的war,最为常用的是直接操作webapp目录,将完整的war包或者web应用直接放到webapp目录下.使用 ...
- spring中创建bean对象的三种方式以及作用范围
时间:2020/02/02 一.在spring的xml配置文件中创建bean对象的三种方式: 1.使用默认构造函数创建.在spring的配置文件中使用bean标签,配以id和class属性之后,且没有 ...
- Java中 实现多线程成的三种方式(继承,实现,匿名内部类)
---------------------------------------------------------------------------------------------------- ...
- Linux中设置服务自启动的三种方式
有时候我们需要Linux系统在开机的时候自动加载某些脚本或系统服务 主要用三种方式进行这一操作: ln -s 在/etc/rc.d/rc*.d目录中建立/e ...
- [转]Linux中设置服务自启动的三种方式
from:http://www.cnblogs.com/nerxious/archive/2013/01/18/2866548.html 有时候我们需要Linux系统在开机的时候自动加载某些脚本或系统 ...
- Linux中设置服务自启动的三种方式,ln -s 建立启动软连接
有时候我们需要Linux系统在开机的时候自动加载某些脚本或系统服务(http://www.0830120.com) 主要用三种方式进行这一操作: ln -s 在/etc/rc.d/rc*.d目录中建立 ...
随机推荐
- 【HDOJ】3727 Jewel
静态区间第K大值.主席树和划分树都可解. /* 3727 */ #include <iostream> #include <sstream> #include <stri ...
- regsvr32提示模块加载失败 请确保二进制
微软官方的一部分解释 https://support.microsoft.com/en-us/kb/249873 关于32位和64位的说明 http://csi-windows.com/blog/al ...
- oracle 分组排序
SELECT * FROM (SELECT A.*, RANK() OVER(PARTITION BY A.DR_ATP_ID, A.AT_CODE ORDER BY A.KEY_CODE) RANK ...
- windows ping RPi 2B
/************************************************************************* * windows ping RPi 2B * 声 ...
- apache开源项目--Camel
Apache Camel 是一个非常强大的基于规则的路由以及媒介引擎,该引擎提供了一个基于POJO的 企业应用模式(Enterprise Integration Patterns)的实现,你可以采用其 ...
- Java [Leetcode 283]Move Zeroes
题目描述: Given an array nums, write a function to move all 0's to the end of it while maintaining the r ...
- (六)学习CSS之color属性
参考:http://www.w3school.com.cn/cssref/pr_text_color.asp color 属性规定文本的颜色. 这个属性设置了一个元素的前景色(在 HTML 表现中,就 ...
- TortoiseSVN中分支和合并实践
使用svn几年了,一直对分支和合并敬而远之,一来是因为分支的管理不该我操心,二来即使涉及到分支的管理,也不敢贸然使用合并功能,生怕合并出了问题对团队造成不良影响,最主要的原因是,自己对分支的目的和合并 ...
- java泛型小总结
一. 泛型概念的提出(为什么需要泛型)? 首先,我们看下下面这段简短的代码: public class GenericTest { public static void main(String[] a ...
- 黑盒测试用例设计方法&理论结合实际 -> 等价类划分
一. 概念 等价类划分法是把程序的输入域划分成若干部分(子集),然后从每个部分中选取少数代表性数据作为测试用例.每一类的代表性数据在测试中的作用等价于这一类中的其他值. 二. 等价类划分的应用 等价类 ...