【Android LibGDX游戏引擎开发教程】第07期:中文字体的显示和绘制(上)
在字体的显示和绘制中,Libgdx的作者(Mario Zechner,美国人)给我们提供了一个非常好用的工具
——Hiero,那么下面就来看看它具体的使用方法。
一、Hiero工具的使用
2、下载结束后,双击hiero.jar文件打开,我们可以看到Hiero的一些基本功能,相比来说作者做的还是比较简单易
懂的。从界面上知道,它包括很多选项,可以制作特效、改变背景颜色、设置内间距等等,右侧还有作提供给我们
的做好的字体效果点击“Add”按钮就可以添加。如下图所示,将它的功能简单的标注了下,这里就不详细介绍了,
有兴趣的同学可以自己去摸索一下。
注意 :在“引入ttf格式字体文件”这一栏中,点击按钮,可以引入我们自己下载的一些更优美的字体,但是博主试
了几种字体,在输入文字的时候发现有些个别的文字显示不出来,这里需要注意一下,不过问题也不大,在下一篇文
章中,我们还会使用到另外一种方法来教大家实现我们自己想要的ttf格式的字体。
3、编辑好你要写的文字后,点击菜单栏“File”选项,然后选中“Save as BMFont Files”,生成两个文件,如下
图所示:
将它们拷贝到assets文件夹下,如下图所示:
注意:如果你要使用的字,只能是.fnt文件里面存在的文字,否则是显示不出来的。比如,我文件里面有“我是一条寻水的鱼”几个字,那么我可以在程序输出的时候写出这几个字,但是我要是想输出“天气晴朗”这4个字,因为编辑文件里面没有这几个字,所以就显示不出来。
4、可能有的读者会问为什么要加载fnt文件?.fnt文件是做什么用的呢?
这里简单解释一下:由于Libgdx底层是用OpenGL实现的,所以Libgdx是可以支持中文的。但是libgdx中的汉字都
是通过贴图的方式显示的,我们用记事本打开myfont.fnt文件,里面显示的部分内容(如下图),同时对照.png图片
来参考下,可以很明显的看出,libgdx的文字绘制是根据fnt文件获取对应文字的在png中的坐标位置,然后截取图片
的相应部分进行绘制。
二 、BitmapFont类
1、BitmapFont介绍
该类存放在com.badlogic.gdx.graphics.g2d包下,继承自Object,实现了Disposable接口。
2、BitmapFont用途
渲染静态文本,同时可以设置文字的颜色和大小等等。
三、实现效果图
文字的单行显示
文字的多行显示
四、详细代码编写
1、单行文字的显示代码
package com.example.mylibgdxfont; import com.badlogic.gdx.ApplicationListener;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.graphics.GL10;
import com.badlogic.gdx.graphics.g2d.BitmapFont;
import com.badlogic.gdx.graphics.g2d.SpriteBatch; public class MyGame implements ApplicationListener {
private SpriteBatch batch;
private BitmapFont font; @Override
public void create() {
font = new BitmapFont(Gdx.files.internal("myfont.fnt"),Gdx.files.internal("myfont.png"), false);
// font.setColor(0.5f, 0.4f, 0.6f, 1);// 设置颜色
// font.setScale(1.5f);// 字体比例大小
batch = new SpriteBatch();
} @Override
public void dispose() {
batch.dispose();
font.dispose();
} @Override
public void render() {
Gdx.gl.glClearColor(1, 1, 1, 1);
Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT);
batch.begin();
font.draw(batch, "我是一条寻水的鱼", 100, 460);
batch.end();
} @Override
public void resize(int width, int height) {
} @Override
public void pause() {
} @Override
public void resume() {
}
}
它们是绘制字中文字符的起点坐标,遵循笛卡尔坐标系;
第一个字符默认编码是0而不是1,请牢记。
2、多行文字的显示代码
package com.example.mylibgdxfont02; import com.badlogic.gdx.ApplicationListener;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.graphics.GL10;
import com.badlogic.gdx.graphics.g2d.BitmapFont;
import com.badlogic.gdx.graphics.g2d.SpriteBatch; public class MyGame implements ApplicationListener {
private SpriteBatch batch;
private BitmapFont font; @Override
public void create() {
font = new BitmapFont(Gdx.files.internal("myfont.fnt"),Gdx.files.internal("myfont.png"), false);
// font.setColor(0.5f,0.4f,0.6f,1);//设置颜色
// font.setScale(1.0f);//字体比例大小
batch = new SpriteBatch();
} @Override
public void dispose() {
batch.dispose();
font.dispose();
} @Override
public void render() {
Gdx.gl.glClearColor(1, 1, 1, 1);
Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT);
batch.begin();
font.draw(batch, "——我是一条寻水的鱼", 100, 460);
font.drawMultiLine(batch, "晚风把荣华吹散\n名利是如此浅薄", 0, 0.8f * Gdx.graphics.getHeight());
batch.end();
} @Override
public void resize(int width, int height) {
} @Override
public void pause() {
} @Override
public void resume() {
}
}
BitmapFont类中有一个drawMultiLine()方法帮我们解决了多行显示的问题,我们只需要在中文字符中加入换行符(\n)即可,而且它还是自动识别的,非常简单。
是指文字的对齐方式,有LEFT、RIGHT、CENTER几种方式。其中,
LEFT的绘制原点是左上角、
RIGHT的绘制原点是右上角、
CENTER的绘制原点是每行文字中心,向两边展开。
【Android LibGDX游戏引擎开发教程】第07期:中文字体的显示和绘制(上)的更多相关文章
- 【Android LibGDX游戏引擎开发教程】第08期:中文字体的显示和绘制(下)
在上一篇的文章中,我们介绍了Hiero这个非常好用工具的使用,但是LIbgdx的BitmapFont不支持多图,常用汉字 3500个,你总不能用hiero自己做吧,那怎么办呢?这其实微软早就解决这个问 ...
- 【Android LibGDX游戏引擎开发教程】第06期:图形图像的绘制(下)图片整合工具的使用
在上一篇文章中,我们提到了图片必须是2的n次方的问题.但是随着Libgdx的不断完善和发展,使用一些工具就 可以很好的解决了这样一个问题,但是它的功能又不仅仅只限于此,那么下面就来让我们看看Textu ...
- 基于libgdx游戏引擎开发的飞天猫
闲来没事学学游戏,这是鄙人第一个小游戏——飞天猫 1,基于Android开发的小游戏,至少Android2.2以上的系统. 2,界面简洁,美观,游戏易操作,上手快. 3,可以左右摇摆手机来改变飞天猫的 ...
- 【转】【Android UI设计与开发】第07期:底部菜单栏(二)Fragment的详细介绍和使用方法
原始地址:http://blog.csdn.net/yangyu20121224/article/category/1431917/1 由于TabActivity在Android4.0以后已经被完全弃 ...
- libgdx游戏引擎教程
第一讲:libgdx游戏引擎教程(一)性能优良的游戏引擎—libgdx http://www.apkbus.com/android-57355-1-1.html 第二讲: libgdx游戏引擎教程(二 ...
- 或许您还不知道的八款Android开源游戏引擎
很多初学Android游戏开发的朋友,往往会显得有些无所适从,他们常常不知道该从何处入手,每当遇到自己无法解决的难题时,又往往会一边羡慕于iPhone下有诸如Cocos2d-iphone之类的免费游戏 ...
- [转载]或许您还不知道的八款Android开源游戏引擎
或许您还不知道的八款Android开源游戏引擎 分类: 技术文章 2010-08-04 20:27 17430人阅读 ...
- Android 2D游戏引擎AndEngine配置环境
Android 2D游戏引擎AndEngine配置环境 1.2 配置环境 在任何编程中,都需要一些软件或者硬件的支持.否则,没有硬件软件是不可能存在的,而想要编写对应语言的的程序,这需要对应语言库和 ...
- 【Cocos2d-x游戏引擎开发笔记(25)】XML解析
原创文章,转载请注明出处:http://blog.csdn.net/zhy_cheng/article/details/9128819 XML是一种非常重要的文件格式,由于C++对XML的支持非常完善 ...
随机推荐
- jQuery EasyUI API - Layout - Layout[原创汉化官方API]
最近在学习jQuery EasyUI,发现中文的文档好少,部分文档不错但它是鸟语的,为了大家也为了自己学习吧,汉化做一下笔记. 有没有说清楚的,或者翻译不正确的地方还请大家谅解指出.. 由于工作时间原 ...
- CodeIgniter学习一:基础知识
1. url片段(CI域名组成说明) example.com/index.php/test/index 第一部分(test):控制器 第二部分(index):方法,动作 如果第二部分 ...
- 使用Prism提供的类实现WPF MVVM点餐Demo
使用Prism提供的类实现WPF MVVM点餐Demo 由于公司开发的技术需求,近期在学习MVVM模式开发WPF应用程序.进过一段时间的学习,感受到:学习MVVM模式,最好的方法就是用MVVM做几个D ...
- log4net项目中如何配置,以下详解
log4net.config配置文件 <?xml version="1.0" encoding="utf-8"?> <log4net debu ...
- attr与prop的区别
我们在获取checked属性值的时候,如果被选中则值为"checked"没选中获取值就是undefined. (引述他人)因为在有些浏览器中比如说只要写disabled,check ...
- Bootstrap 模态框(也可以说的弹出层)
最近在尝试使用bootstrap的模态框 使用模态框主要要引入一下几个js和css: bootstrap.css jquery.1.9.1.js(这个可以灵活选择) bootstrap.js html ...
- 配置Sublime Text 2 的Python运行环境
Sublime Text 2作为一款轻量级的编辑器,特点鲜明,方便使用,愈发受到普罗大众的喜爱,我个人最近也开始用了起来.同时,我近段时间还在学习Python的相关东西,所以开始用ST2来写Pytho ...
- 交叉编译和使用HTOP
1.什么是htop htop来源于top,top是Unix/linux下功能强大的性能检测工具之一,用于实时检测并统计进程的属性和状态,基于ncurses库,可上显示文字界面.但是top已经非常陈旧, ...
- Push Notification总结系列(二)
Push Notification系列概括: 1.Push Notification简介和证书说明及生成配置 2.Push Notification的iOS处理代码和Provider详解 3.Push ...
- 苹果APNs’ device token特性和过期更新
APNs全名是Apple Push Notification Service.用iPhone的应该都习惯了,每次安装完一个新应用启动后,几乎都会弹出个警告框,“XXX应用”想要给您发送推送通知.这个警 ...