当前位置: 首页 > news >正文

cocos2d Labels and Fonts 标签和字体(附:关于Hiero的二三事)

Labels and Fonts 标签和字体

Introduction 介绍

cocos2d 支持 TTF (True Type Fonts) 标签和纹理 atlas 标签.

Pros and Cons of TTF labels: ( Label )

  • + All the pros of TTF fonts: any size, kerning support, etc.
  • + 简单实用,不需要外部编辑器.
  • - 创建和更新很慢,因为一个新的纹理将要被创建

Pros and Cons of texture atlas labels: ( LabelAtlasBitmapFontAtlas )

  • + 创建和更新很快,因为它不需要创建新的纹理.
  • + 字体可以自定义 (shadows, gradients, blur, etc)
  • - 依赖于外部的编辑器: AngelCode / Hiero editor, GIMP / Photoshop

Label objects 标签对象

Creating labels 创建标签的简单方式

例如:

Label *label = [Label labelWithString:@"Hello World" fontName:@"Marker Felt" fontSize:24];
[self add: label];

fontName 是要使用的 TTF 格式字体的名字

从 v0.8.2 版本开始,你可以使用自定义的TTF文件. 只需要把.ttf 文件加入到工程. 例如自定义的TTF 文件:

Label *label = [Label labelWithString:@"Hello World" fontName:@"Schwarzwald Regular" fontSize:24];
[self add: label];

从 v0.8.2版本开始:

  • 使用 FontLabel 库来读取字体.
  • 如果不成功将会使用  UIFont 类 (like in v0.8.1)

重要: OpenGL 纹理的大小将会根据字体的大小和名字自动计算出来.

创建标签的复杂方式:

你同样可以使用 API创建:

Label *left = [Label labelWithString:@"Hello World" dimensions:CGSizeMake(480,50) 
alignment:UITextAlignmentLeft fontName:@"Marker Felt" fontSize:32];
[self add: left]

如果你使用了这种方式,那么你必须传递一个OpenGL纹理的维度,如果这个纹理不够大,那么只能创建出来一部分了。

可能的对齐方式:

  • UITextAlignmentLeft (左对齐)
  • UITextAlignmentCenter (居中)
  • UITextAlignmentRight (右对齐)

Updating更新

Like any object that implements the CocosNodeLabel protocol you can update it using the setString method. Example:

[label setString: @"Hello World 2"];

重要: 每次调用 setString 的时候,一个新的OPENGL 纹理将会被创建. 这意味着setString 和创建一个新的标签一样慢.所以,当你需要频繁的更新它们的时候,尽可能的不用去使用标签对象。而应该使用LabelAtlas或者是BitmapFontAtlas

Alignment 对齐

使用anchorPoint 属性可以改变对齐方式. 例如:

//left alignment
[label setAnchorPoint: ccp(0, 0.5f)];

// right alignment
[label setAnchorPoint: ccp(1, 0.5f)];

// center aligment (default)
[label setAnchorPoint: ccp(0.5f, 0.5f)];

Texture Atlas labels

一共有两种类型的 atlas:

  • BitmapFontAtlas
  • LabelAtlas

BitmapFontAtlas

Introduction 介绍

BitmapFontAtlas 可以创建一个很快的标签有以下几个原因:

  • bitmap (image) 可以通过编辑器自定义
  • 可以没有任何时间中断去创建或者更新一个标签
  • It is very flexible. Each letter of the label can be treated like an  AtlasSprite
  • 有内核的支持

The BitmapFontAtlas label parses the Angel Code Font format to create a label. To create these kind of labels, you can use any of these editors:

  • http://www.n4te.com/hiero/hiero.jnlp (java version)
  • http://slick.cokeandcode.com/demos/hiero.jnlp (java version)
  • http://www.angelcode.com/products/bmfont/ (windows only)

Java版本编辑器 vs. Windows版本的编辑器: 

  • Windows 编辑器是官方的Angel Code 编辑器
  • Java版本编辑器: 可以在Mac使用
  • Java 版本编辑器: 可以有一些额外的特性例如 shadow, gradient, blur

创建一个BitmapFontAtlas

通过如下的方式可以创建一个对象:

BitmapFontAtlas *label = [BitmapFontAtlas bitmapFontAtlasWithString:@"Hello World" fntFile:
@"bitmapFontTest.fnt"];
[self add:label]

操作

由于 BitmapFontAtlas 是 AtlasSpriteManager的子类,你可以以AtlasSprite的形式操纵其中的任何一个字符。第一个字符以tag=0的形式加载,第二个是依次加1。等等。。例如

BitmapFontAtlas *label = [BitmapFontAtlas bitmapFontAtlasWithString:@"Bitmap Font Atlas" 
fntFile:@"bitmapFontTest.fnt"];
AtlasSprite *char_B = (AtlasSprite*) [label getChildByTag:0]; // character 'B'
AtlasSprite *char_m = (AtlasSprite*) [label getChildByTag:3]; // character 'm'

LabelAtlas

Introduction 介绍

LabelAtlas是cocos2d里面最快的。但是是BitmapFontAtlas子类。它落后的兼容性还是被维护的,但是你可以使用BitmapFontAtlas替换。

Creating a LabelAtlas 创建一个LableAtlas

LabelAtlas *label = [LabelAtlas labelAtlasWithString:@"Hello World" charMapFile:
@"tuffy_bold_italic-charmap.png" itemWidth:48 itemHeight:64 startCharMap:' '];
[self add:label];
  • charMapFile是一个包含所有字符的图像文件。每一个符号都可以按着ASCII进行排序,并且不能包含多于256的符号在里面
  • itemWidth 是字符的宽度像素为单位
  • itemHeight 是字符里面的最高的以像素为单位
  • startCharMap 是Map里面的第一个字符.

LabelAtlas / BitmapFontAtlas 如何更新

像其他的 CocosNodeLabel 协议中的对象一样。我们使用 setString 方法进行更新.

[label setString:@"Hello World 2"];

更新一个 LabelAtlas 或者是 BitmapFontAtlas 基本上不耗费什么时间

LabelAtlas / BitmapFontAtlas 的对齐方式

如果你要修改对齐方式可以使用anchorPoint属性.例如:

//left alignment
[label setAnchorPoint: ccp(0, 0.5f)];

// right alignment
[label setAnchorPoint: ccp(1, 0.5f)];

// center aligment (default)
[label setAnchorPoint: ccp(0.5f, 0.5f)];




http://zhaaaa.tuita.com/blogpost/21673041

关于Hiero的二三事

 

昨天使用hiero自定义字体,经过一番小折腾,最后终于ok,再次总结一下经验。

 

hiero是一个java小程序,能够帮助用户自定义.fnt字体。其中包括填充、轮廓、阴影等效果。进入软件后,首先选择系统自带的字体,然后在Sample Text中输入需要用到的字符。可以根据自己的需要,在右侧的Effects中增减效果。

下方的Rendering中可以预览到当前的字体样式。选择Glyph cache,可以调节所生成png的尺寸以及页数。调节完成后点击reset cache。

最后点击File菜单下面的 Save BMFont files即可。  (注:生成.png和.fnt两个文件,都要拖到工程中才可以执行)

CCLabelBMFont *lbScore = [CCLabelBMFont labelWithString:@"Time:0" fntFile:@"font09.fnt"];
lbScore.anchorPoint = ccp(1,1);
lbScore.scale = 0.6;
[self addChild:lbScore z:1 tag:3];
lbScore.position = ccp(310, 450);

需要注意的是:

1、如果发现生成出来的文字显示时会有重叠、切割的现象,可以再回到hiero界面中查看预览,有可能是字符之间的间距太小造成。只需要调节相应Padding值即可。

2、每生成一个文件,最好关闭hiero,然后再重新进入以生成新的文件。因为这款软件存在不少bug,只打开一次时,不管是覆盖原有文件,还是重新命名,都有可能只改变fnt或png文件中的某一个,就会导致在模拟器中测试时,发现字符全都对不上。

3、有些版本的hiero生成的png文件是反的,将图放进ps中,垂直翻转即可。

 

4、退出hiero时,最好选择File菜单下的Exit退出。













 

 

 

 

 

 

 

 

转载于:https://www.cnblogs.com/pengyingh/articles/2434657.html

相关文章:

  • ios5之ipad开发之分割试图与弹出层的使用
  • After Interview of Mstar
  • 创业路上的成功与快乐
  • linux下IPTABLES配置详解
  • 解决在firefox下js调用as失败问题
  • Linux下启动Java进程并获得进程ID(PID)
  • web前端性能优化指南
  • MS Server数据库里的Char,VarChar,NChar,NVarChar数据类型的异同
  • JSplitPane固定分割比例和禁止拖动分割条
  • ajax实现基于web的文件上传的进度控制
  • kvm虚拟化
  • they're hiring
  • LPC3250 Perpheral IO Mapping
  • 免费在线工具制作自己的卡通头像
  • C#中的Json的序列化和反序列化
  • 002-读书笔记-JavaScript高级程序设计 在HTML中使用JavaScript
  • echarts花样作死的坑
  • egg(89)--egg之redis的发布和订阅
  • gulp 教程
  • Leetcode 27 Remove Element
  • leetcode98. Validate Binary Search Tree
  • mysql innodb 索引使用指南
  • October CMS - 快速入门 9 Images And Galleries
  • Python学习笔记 字符串拼接
  • tweak 支持第三方库
  • 微信端页面使用-webkit-box和绝对定位时,元素上移的问题
  • NLPIR智能语义技术让大数据挖掘更简单
  • 如何通过报表单元格右键控制报表跳转到不同链接地址 ...
  • # 20155222 2016-2017-2 《Java程序设计》第5周学习总结
  • #我与Java虚拟机的故事#连载17:我的Java技术水平有了一个本质的提升
  • (6)设计一个TimeMap
  • (delphi11最新学习资料) Object Pascal 学习笔记---第8章第2节(共同的基类)
  • (Matalb时序预测)WOA-BP鲸鱼算法优化BP神经网络的多维时序回归预测
  • (板子)A* astar算法,AcWing第k短路+八数码 带注释
  • (二)hibernate配置管理
  • (二十五)admin-boot项目之集成消息队列Rabbitmq
  • (三)uboot源码分析
  • (学习日记)2024.02.29:UCOSIII第二节
  • .form文件_SSM框架文件上传篇
  • .NET 6 Mysql Canal (CDC 增量同步,捕获变更数据) 案例版
  • .NET Framework Client Profile - a Subset of the .NET Framework Redistribution
  • .Net IOC框架入门之一 Unity
  • .net 桌面开发 运行一阵子就自动关闭_聊城旋转门家用价格大约是多少,全自动旋转门,期待合作...
  • .NET/C# 在代码中测量代码执行耗时的建议(比较系统性能计数器和系统时间)
  • .net操作Excel出错解决
  • [14]内置对象
  • [dfs搜索寻找矩阵中最长递减序列]魔法森林的秘密路径
  • [Java][方法引用]构造方法的引用事例分析
  • [java面试]宇信易诚 广州分公司 java笔试题目回忆录
  • [json]定义、读写
  • [leetcode] Balanced Binary Tree
  • [LeetCode] Binary Tree Preorder Traversal 二叉树的先序遍历
  • [Lua实战]整理Lua中忽略的问题
  • [NAND Flash 7.1] 闪存系统性能优化方向集锦?AC timing? Cache? 多路并发?
  • [NET].NET Framework 3.5 SP1 真正的离线安装(转)