尊重知识版权,文章转载于:http://www.taikr.com/group/2/thread/1869

这次主要介绍一下关于cocos2d-x 3.x label自动换行的问题,详细的总结一下Cocos2d-x中新字体标签Label,总结如下:

在3.x中,Label支持四种方式的标签创建。并新增了阴影Shadow、轮廓Outline、发光Glow效果的支持。还支持文字内容的行间距、文字间距、自动换行的设置。

  • 创建系统原生字体API:createWithSystemFont

  • 创建TTF:createWithTTF(原LabelTTF)

  • 创建CharMap:createWithCharMap(原LabelAtlas)

  • 创建BMFont:createWithBMFont(原LabelBMFont)

  • Label的属性与方法

  • 文字效果渲染:Shadow、Outline、Glow

  • 对齐方式:TextHAlignment、TextVAlignment

  • Label的尺寸大小

  • 自动换行

  • 行间距、文字间距

  • 单独设置某个字符

PS:关于图片资源,请在Cocos2dx给出的官方样例cpp-tests中寻找。


【createWithSystemFont】

创建系统原生字体的API。

创建方式如下:

//
static Label* createWithSystemFont(
const std::string& text,//字符串内容
const std::string& font,//字体(字体名称、或字体文件)
float fontSize,//字号
const Size& dimensions = Size::ZERO,//label的尺寸大小,默认不设置尺寸
TextHAlignment hAlignment = TextHAlignment::LEFT,//水平对齐方式,默认左对齐::LEFT
TextVAlignment vAlignment = TextVAlignment::TOP //垂直对齐方式,默认顶部 ::TOP
);
//


//
//使用系统的字体名称 "Arial" 来创建
Label* lb1 = Label::createWithSystemFont("123abc","Arial",24);
//


【createWithTTF】

创建TTF的方式有以下两种:

  • 方式一:与2.x中LabelTTF的创建类似,不过使用的fontFile必须为字体文件。

  • 方式二:通过TTF的配置信息数据结构TTFConfig来创建。

1、方式一:与SystemFont创建类似

注:区别在于fontFile必须为字体文件(如"*.ttf"),即不支持使用系统字体名称来创建。

2、方式二:通过TTFConfig配置来创建

2.1、TTFConfig配置


//
typedefstruct_ttfConfig
{
std::stringfontFilePath;//字体文件路径,如"fonts/Arial.ttf"
intfontSize;//字体大小,默认"12"
GlyphCollectionglyphs;//使用的字符集,默认"DYNAMIC"
constchar*customGlyphs;
booldistanceFieldEnabled;//是否让字体紧凑,默认false
intoutlinesize;//字体轮廓大小,默认"0"
//构造函数
_ttfConfig(
constchar*filePath="",
intsize=12,
constGlyphCollection&glyphCollection=GlyphCollection::DYNAMIC,
constchar*customGlyphCollection=nullptr,
boolusedistanceField=false,
intoutline=0
);
}TTFConfig;

//

2.2、使用TTFConfig创建TTF

staticLabel*createWithTTF(

constTTFConfig&ttfConfig,//TTFConfig配置
conststd::string&text,//字符串内容
TextHAlignmentalignment=TextHAlignment::LEFT,
intmaxlinewidth=0//最大文本行宽,0表示不设置。可用于自动换行只用
);

//


使用举例:


TTFConfigttfConfig;

ttfConfig.fontFilePath="fonts/MarkerFelt.ttf";//必须配置
ttfConfig.fontSize=12;
ttfConfig.distanceFieldEnabled=false;
ttfConfig.outlinesize=0;
ttfConfig.glyphs=GlyphCollection::DYNAMIC;
ttfConfig.customGlyphs=nullptr;
//使用TTFConfig配置,来创建TTF
Label*lb3=Label::createWithTTF(ttfConfig,"123abc");

//

【createWithCharMap】

CharMap的用法与2.x中的LabelAtlas是一样的,一般用来显示数字。不过它也可以用来显示其他字符,如英文字符。

字体文件资源一般来自一张.png图片,或.plist文件。

注:图片中每个字符的大小必须是固定的,若要改变字体大小,只能通过setScale放缩来实现。

创建CharMap有三种方式:

  • 使用.png图片创建

  • 使用纹理Texture2D创建

  • 使用.plist创建

从图片中从左到右,一块一块截取。从字符startCharMap开始一一对应。

第一块小图片对应字符startCharMap;第二块小图片对应字符startCharMap+1;第三块对应startCharMap+2……以此类推。

注:startCharMap为ASCII码,即:数字'0'为48。

//charMapFile:字符资源图片png
//itemWidth:每个字符的宽
//itemHeight:每个字符的高
//startCharMap:图片第一个是什么字符
staticLabel*createWithCharMap(conststd::string&charMapFile,intitemWidth,intitemHeight,intstartCharMap);
staticLabel*createWithCharMap(Texture2D*texture,intstartCharMap);
staticLabel*createWithCharMap(conststd::string&plistFile);
//

0、字符图片资源

digit.png:200*20(每个数字20*20)。

1、使用.png创建

1
2
3
4
5
//
//create字符图片.png,每个字符宽,高,起始字符
Label*lb4=Label::createWithCharMap("fonts/digit.png",20,'0');
lb4->setString("123456");//设置字符串内容
//

2、使用Texture2D创建

使用方法实际上与.png是类似的。

1
2
3
4
5
6
7
//
//创建图片纹理Texture2D
Texture2D*texture=TextureCache::getInstance()->addImage("fonts/digit.png");
Label*lb5=Label::createWithCharMap(texture,'0');
lb5->setString("123456");//设置字符串内容
//

3、使用.plist创建

在digit.plist里需要配置:用到的字符图片资源.png,每个字符的宽、高,起始字符。

如下所示:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
//
<?xmlversion="1.0"encoding="UTF-8"?>
<!DOCTYPEplistPUBLIC"-//Apple//DTdplIST1.0//EN"" http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plistversion="1.0">
<dict>
<key>version</key><!--plist版本-->
<integer>1</integer>
<key>textureFilename</key><!--字符图片资源:digit.png-->
<string>digit.png</string>
<key>itemWidth</key><!--每个字符的宽:20-->
<integer>20</integer>
<key>itemHeight</key><!--每个字符的高:20-->
<integer>20</integer>
<key>firstChar</key><!--起始字符:'0'-->
<integer>48</integer>
</dict>
</plist>
//

使用plist创建CharMap的方法:

//
//plist的配置信息,如上所示
Label*lb6=Label::createWithCharMap("fonts/digit.plist");
lb6->setString("123456");
//


【createWithBMFont】

BMFont的用法与2.x中的LabelBMFont是一样的。

这个类使用之前,需要添加好字体文件,包括一个图片文件(*.png)和一个字体坐标文件(*.fnt),这两个文件名称必须一样。可以下载一个fnt编辑工具来自定义字体。

值得注意的是:

  • 在2.x中,可以使用getChildByTag(i)来获取第i个字符,对其单独设置属性、动作等。

  • 在3.x中,则是使用getLetter(i),而不再是getChildByTag(i)。

这个类也没办法指定字体的字号大小,需要用setScale来缩放调整大小。

1
2
3
4
5
6
7
8
9
//
staticLabel*createWithBMFont(
conststd::string&bmfontFilePath,//字体文件.font
conststd::string&text,//内容
constTextHAlignment&alignment=TextHAlignment::LEFT,
intmaxlinewidth=0,
constVec2&imageOffset=Vec2::ZERO//字符图片的起始左上角坐标。一般不要设置这个参数,因为坐标的配置均已在.font里完成
);
//

使用举例:

1
2
3
//
Label*lb7=Label::createWithBMFont("bitmapFontTest.fnt","123abc",TextHAlignment::LEFT);
//

【Label的属性与方法】

Label继承于:

  • SpriteBatchNode:用于加快字体的渲染速度。

  • LabelProtocol:用于设置Label的字符串内容。

主要函数如下:


77
只看楼主回复 倒序查看回复

cocos2d-x 3.x label 功能详解,包括行列间距等细节问题的更多相关文章

  1. Html5 canvas实现粒子时钟的示例代码

    这篇文章主要介绍了Html5 canvas实现粒子时钟的示例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

  2. 移动端html5模拟长按事件的实现方法

    这篇文章主要介绍了移动端html5模拟长按事件的实现方法的相关资料,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

  3. ios – 在applicationWillEnterForeground触发时更改UIView

    本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请发送邮件至dio@foxmail.com举报,一经查实,本站将立刻删除。

  4. UILabel导致应用程序在添加到视图时崩溃(仅限Xcode 6和iOS 8)

    我已将我的项目转换为Xcode6,以便为iOS8构建.但是,特定的UILabel会导致应用程序在添加到视图层次结构时崩溃.这是我收到的唯一错误日志:我无法在项目中的任何位置找到contentInsetsFromFonts方法.此外,我甚至无法在网上任何地方找到它的参考,包括Apple的文档.我没有为这个UIViewController使用NIB,因此UI是在loadView方法中构建的:该应用程序

  5. iOS 7通知中心与标签一样

    您可以试试,也许在将模糊应用到标签之前为模糊添加一点白色.

  6. 在Xcode4中,你可以更改用于显示隐形字符的字符吗?

    我更喜欢VisualStudio显示隐形的方式……

  7. iOS safari输入插入颜色

    我在iPhone设备上有一个小的CSS问题.我的搜索输入为蓝色,当用户关注它时,插入符号几乎不可见:在所有桌面浏览器中,即使在桌面Safari上,它也具有正确的颜色(白色).知道如何修复此问题并更改iOS设备上的插入颜色吗?

  8. ios – 应用程序商店描述特殊字符

    是不是可以在AppStore描述中使用像星星这样的特殊字符了?我得到这个错误:描述不得包含标记语言.说明不得包含以下字符:★提前致谢:)解决方法仍然允许一些unicode字符.以下字符已经过测试并仍然有效:◆√至于现在他们工作正常,但苹果可以随时再次改变条件.

  9. ios – 将数组中的字符转换为整数

    即使我搜索了文档,我似乎无法弄清楚如何做到这一点.我试图弄清楚如何将数组中索引处的字符转换为整数.例如,假设我有一个名为“容器”的字符数组,我无法弄清楚该怎么做:谢谢您的帮助!解决方法Swift并不容易在原始和类型表示之间进行转换.这是一个在此期间应该有所帮助的扩展:这使您可以非常接近您想要的:对于遇到此问题的任何工程师,请参阅rdar://17494834

  10. 如何计算iOS 7中的实际字体大小(不是边框)?

    编辑:链接的“重复”问题仅涉及计算文本矩形.我需要在标签缩放之后计算实际字体大小,而不是字符串大小.此方法现已弃用:如何在iOS7中计算UILabel的字体大小,以缩小文字大小以适应?

随机推荐

  1. 【cocos2d-x 3.x 学习笔记】对象内存管理

    Cocos2d-x的内存管理cocos2d-x中使用的是上面的引用计数来管理内存,但是又增加了一些自己的特色。cocos2d-x中通过Ref类来实现引用计数,所有需要实现内存自动回收的类都应该继承自Ref类。下面是Ref类的定义:在cocos2d-x中创建对象通常有两种方式:这两中方式的差异可以参见我另一篇博文“对象创建方式讨论”。在cocos2d-x中提倡使用第二种方式,为了避免误用第一种方式,一般将构造函数设为protected或private。参考资料:[1]cocos2d-x高级开发教程2.3节[

  2. 利用cocos2dx 3.2开发消灭星星六如何在cocos2dx中显示中文

    由于编码的不同,在cocos2dx中的Label控件中如果放入中文字,往往会出现乱码。为了方便使用,我把这个从文档中获取中文字的方法放在一个头文件里面Chinese.h这里的tex_vec是cocos2dx提供的一个保存文档内容的一个容器。这里给出ChineseWords,xml的格式再看看ChineseWord的实现Chinese.cpp就这样,以后在需要用到中文字的地方,就先include这个头文件然后调用ChineseWord函数,获取一串中文字符串。

  3. 利用cocos2dx 3.2开发消灭星星七关于星星的算法

    在前面,我们已经在GameLayer中利用随机数初始化了一个StarMatrix,如果还不知道怎么创建星星矩阵请回去看看而且我们也讲了整个游戏的触摸事件的派发了。

  4. cocos2dx3.x 新手打包APK注意事项!

    这个在编译的时候就可以发现了比较好弄这只是我遇到的,其他的以后遇到再补充吧。。。以前被这两个问题坑了好久

  5. 利用cocos2dx 3.2开发消灭星星八游戏的结束判断与数据控制

    如果你看完之前的,那么你基本已经拥有一个消灭星星游戏的雏形。开始把剩下的两两互不相连的星星消去。那么如何判断是GameOver还是进入下一关呢。。其实游戏数据贯穿整个游戏,包括星星消除的时候要加到获得分数上,消去剩下两两不相连的星星的时候的加分政策等,因此如果前面没有做这一块的,最好回去搞一搞。

  6. 利用cocos2dx 3.2开发消灭星星九为游戏添加一些特效

    needClear是一个flag,当游戏判断不能再继续后,这个flag变为true,开始消除剩下的星星clearSumTime是一个累加器ONE_CLEAR_TIME就是每颗星星消除的时间2.连击加分信息一般消除一次星星都会有连击信息和加多少分的信息。其实这些combo标签就是一张图片,也是通过控制其属性或者runAction来实现。源码ComboEffect.hComboEffect.cpp4.消除星星粒子效果消除星星时,为了实现星星爆裂散落的效果,使用了cocos2d提供的粒子特效引擎对于粒子特效不了

  7. 02 Cocos2D-x引擎win7环境搭建及创建项目

    官网有搭建的文章,直接转载记录。环境搭建:本文介绍如何搭建Cocos2d-x3.2版本的开发环境。项目创建:一、通过命令创建项目前面搭建好环境后,怎样创建自己的Cocos2d-x项目呢?先来看看Cocos2d-x3.2的目录吧这就是Cocos2d-x3.2的目录。输入cocosnew项目名–p包名–lcpp–d路径回车就创建成功了例如:成功后,找到这个项目打开proj.win32目录下的Hello.slnF5成功了。

  8. 利用cocos2dx 3.2开发消灭星星十为游戏添加音效项目源码分享

    一个游戏,声音也是非常的重要,其实cocos2dx里面的简单音效引擎的使用是非常简单的。我这里只不过是用一个类对所有的音效进行管理罢了。Audio.hAudio.cpp好了,本系列教程到此结束,第一次写教程如有不对请见谅或指教,谢谢大家。最后附上整个项目的源代码点击打开链接

  9. 03 Helloworld

    程序都有一个入口点,在C++就是main函数了,打开main.cpp,代码如下:123456789101112131415161718#include"main.h"#include"AppDelegate.h"#include"cocos2d.h"USING_NS_CC;intAPIENTRY_tWinMain{UNREFERENCED_ParaMETER;UNREFERENCED_ParaMETER;//createtheapplicationinstanceAppDelegateapp;return

  10. MenuItemImage*图标菜单创建注意事项

    学习cocos2dx,看的是cocos2d-x3.x手游开发实例详解,这本书错误一大把,本着探索求知勇于发现错误改正错误的精神,我跟着书上的例子一起调试,当学习到场景切换这个小节的时候,出了个错误,卡了我好几个小时。

返回
顶部