在我使用OGEngine_2.x进行消灭圈圈(星星)游戏的实践的时候,使用BitmapFont对自定义字体进行调用。

原文字体教程如下:http://blog.csdn.net/OrangeGame/article/details/40182921

原文使用的Hiero版本为v3.0,但我在网上找了很久没找到,只找到了Hiero_v2.0

根据教程,使用Hiero_v2.0生成fnt,并使用TexturePacker将png图片压缩为pvr.ccz和xml后,放入android项目当中。

发现一旦调用com.orange.opengl.font.BitmapFont构造方法加载字体文件,则出现黑屏情况,原因在于fnt无法找到需要加载的png文件(因为在原教程中png已经压缩为pvr.ccz和xml)。

解决办法:

1.用记事本打开fnt文件,将file="XXX.png"改为file="XXX.xml"(即TexturePacker生成的xml文件)。(不建议使用该方法)

此时在项目中使用BitmapFont进行字体输出,可能会出现奇怪的图案,因为TexturePacker压缩png后生成的pvr.ccz和xml的字符坐标和原png的不一样。

TexturePacker的输出设置必须与Hiero的输出设置一样,才可以正常显示。

2.直接使用Hiero_v2.0生成的fnt和png两个文件进行加载。

若输出的png文件较小可以使用这种方法。缺点是若文件较大,不进行压缩的话会比较耗内存。

Hiero_v2.0的问题在于:没有办法输出中文字符。对于仅需要英文字符的同学来说,Hiero2.0足够用了。

想要输出中文字符集可以试试BMFont。

BMFont的教程(看前半段就可以了):

http://blog.csdn.net/qiurisuixiang/article/details/8984288

不过如果要在OGE_2.1.4以及之前的版本中使用BMFont输出的fnt文件,还应该做一些修改。

1.将fnt文件用记事本打开

2.删除 alphaChnl / redChnl / greenChnl / blueChnl /  kernings / kerning 等不必要的参数

3.使用ANSI编码进行保存

最后附上OGE文字输出的代码和效果图:

以下仅是GameLayer的主要代码——切勿直接使用

import com.orange.engine.device.Device;
import com.orange.entity.text.Text;
import com.orange.entity.text.TextOptions;
import com.orange.util.HorizontalAlign;
import com.orange.util.color.Color;
import com.orange.opengl.font.BitmapFont; public class GameLayer extends MatchLayer{ // 引用上级scene
private GameScene mGameScene; public GameLayer(GameScene pScene) {
super(pScene);
this.mGameScene = pScene;
initView();
}
private void initView() {
BitmapFont bitmapFont = new BitmapFont(getEngine().getTextureManager(), Device.getDevice().getFileManage(), "font/bitmapFont.fnt");
bitmapFont.load(); Text t = new Text(this.getCentreX(), 50, bitmapFont, "你好世界", new TextOptions(HorizontalAlign.CENTER), this.getVertexBufferObjectManager());
t.setColor(Color.RED);
this.attachChild(t);
}
}

附:

hiero_v2.0的下载安装和使用

OGEngine_2.x中BitmapFont加载后黑屏问题的解决办法的更多相关文章

  1. 关于NGUI的动态加载后的刷新显示问题,解决办法!!

    http://momowing.diandian.com/post/2012-09-06/40038001275 最近碰NGUI用到它的动态列表功能(ps:就是加东西,删除东西).我这里用的是UIDr ...

  2. ArcGIS客户端API中加载大量数据的几种解决办法

    ArcGIS客户端API中加载大量数据的几种解决办法 2011-03-25 18:17 REST风格的一切事物方兴未艾,ArcGIS Server的客户端API(Javascript/Flex/Sil ...

  3. BadImageFormatException,未能加载正确的程序集XXX的解决办法

    BadImageFormatException,未能加载正确的程序集XXX的解决办法 IDE:VS2010 语言:C# 异常:System.BadImageFormatException,未能加载正确 ...

  4. Eclipse中js文件修改后浏览器不能及时更新的解决办法

    项目中js文件修改后浏览器不能及时更新的解决办法 转载:http://www.codeweblog.com/%E9%A1%B9%E7%9B%AE%E4%B8%ADjs%E6%96%87%E4%BB%B ...

  5. VMware Workstation 14 黑屏的一个解决办法

    近期很多朋友遇到了VMware Workstation 14开启或新建虚拟机后黑屏的现象,同时发现如果挂起虚拟机,可以显示挂起前最后的画面.显然,虚拟机核心是正常工作的,只是“显示”方面出现了问题. ...

  6. jquery中load()加载页面,刷新之后,加载的页面不显示的解决办法

    <script language="javascript" type="text/javascript"> $(function(){ $(&quo ...

  7. IIS无法加载字体文件(*.woff,*.svg)的解决办法

    在编写前端代码的过程中经常会遇到使用特定的字体(*.woff,*.svg),此时在加载字体时请求会被返回 Failed to load resource: the server responded w ...

  8. Bootstrap 模态对话框只加载一次 remote 数据的解决办法 转载

    http://my.oschina.net/qczhang/blog/190215 摘要 前端框架 Bootstrap 的模态对话框,可以使用 remote 选项指定一个 URL,这样对话框在第一次弹 ...

  9. 使用Django的时候,页面请求正常,也没有报任何错误,甚至连警告都没有的情况下,页面却还是原地不动或者闪一下或者无限显示加载动画的情况下的解决办法

    这个问题描述比较笼统,但根据我目前遇到过两种情况来看,似乎都比较重要而且实用,所以打算分别讲述一下. 说明:Django的版本是Django2.0 第一种:URL配置错误 页面闪一下,却原地不动,可能 ...

随机推荐

  1. javascript(js)创建对象的模式与继承的几种方式

    1.js创建对象的几种方式 工厂模式 为什么会产生工厂模式,原因是使用同一个接口创建很多对象,会产生大量的重复代码,为了解决这个问题,产生了工厂模式. function createPerson(na ...

  2. jdbc学习总结

    jdbc学习总结:   一.简介: jdbc,直译为java连接数据库.实际为java为很好的操作数据库而提供的一套接口,接口的实现(即驱动)由各个数据库厂商提供.   二.知识要点: 连接5要素,3 ...

  3. js-异步机制与同步机制

    Javascript的优势之一是其如何处理异步代码.异步代码会被放入一个事件队列,等到所有其他代码执行后才进行,而不会阻塞线程 1 理解异步代码: 1.1 JavaScript最基础的异步函数是set ...

  4. 设置Intel网卡以抓取报文的vlan tag

    一.实验环境 1.ThinkPad T450 Notebook 2.Notebook网卡Intel I218-V 二.设置步骤 1."设备管理器" -> "Inte ...

  5. 【转】DSCP 与IP 优先级IP优先级

    在IPv4的报文头中,TOS字段是1字节,如下图所示.根据RFC1122的定义,IP优先级(IPPrecedence)使用最高3比特(第0-2比特).+++++++++++++++++++++++++ ...

  6. zoj 1889 ones 数学

    Ones Time Limit: 2 Seconds      Memory Limit: 65536 KB Given any integer 0 <= n <= 10000 not d ...

  7. WPF自定义命令和处发命令

    接实现ICommand接口的命令.在介绍之前,先看一下ICommand接口的原型: event EventHandler CanExecuteChanged; bool CanExecute(obje ...

  8. java虚拟机指令dup的理解

    举个例子: public class ExceptionTest{ void cantBeZero(int i) throws Exception{ throw new Exception(); } ...

  9. python 目录文件

    每天写一点,总有一天我这条咸鱼能变得更咸 python 中对文件及目录的操作基本依赖与os,shutil模块,其中以os模块为主,最主要的几个方法实例如下: 1.判断文件/目录是否存在(os.path ...

  10. (转)Java 网络IO编程总结(BIO、NIO、AIO均含完整实例代码)

    原文出自:http://blog.csdn.net/anxpp/article/details/51512200 1.BIO编程 1.1.传统的BIO编程 网络编程的基本模型是C/S模型,即两个进程间 ...