libGDX游戏开发之字体样式(七)
libGDX游戏开发之字体样式(七)
libGDX系列
,游戏开发有unity3D巴拉巴拉的,为啥还用java开发?因为我是Java程序员emm…国内用libgdx比较少,多数情况需要去官网和google找资料,相互学习的可以加我联系方式。
libgdx默认的字体样式只支持英文字母和数字和一些符号,若想显示在渲染中使用中文字母可以根据官网教程使用hiero制作。
hiero下载地址:https://alywp.net/5DmQ6r(2021年10月11日最新版,我从外网下载的)
依赖
// 桌面应用
api "com.badlogicgames.gdx:gdx-freetype-platform:$gdxVersion:natives-desktop"
// 核心
api "com.badlogicgames.gdx:gdx-freetype:$gdxVersion"
一、制作字体
运行起来也是比较简单:
java -jar runnable-hiero-2021-10-11.jar
导出保存
将myfont.fnt
、myfont.png
放到资源文件中,使用代码如下:
import com.badlogic.gdx.ApplicationAdapter;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.graphics.Color;
import com.badlogic.gdx.graphics.g2d.BitmapFont;
import com.badlogic.gdx.graphics.g2d.SpriteBatch;
import com.badlogic.gdx.scenes.scene2d.Stage;
import com.badlogic.gdx.scenes.scene2d.ui.Label;
import com.badlogic.gdx.utils.ScreenUtils;
public class MyGdxGame extends ApplicationAdapter {
SpriteBatch batch;
Stage stage;
@Override
public void create() {
stage = new Stage();
batch = new SpriteBatch();
// BitmapFont bitmapFont = new BitmapFont(Gdx.files.internal("myfont.fnt"),
// Gdx.files.internal("myfont.png"), false);
BitmapFont bitmapFont = new BitmapFont(Gdx.files.internal("myfont.fnt"));
Label.LabelStyle font = new Label.LabelStyle(bitmapFont, Color.WHITE);
Label label = new Label("凌康123水电费了看", font);
label.setPosition(20, 200);
stage.addActor(label);
}
@Override
public void render() {
ScreenUtils.clear(1, 0, 0, 1);
stage.draw();
}
@Override
public void dispose() {
batch.dispose();
}
}
效果,不难发现,字体中未包含了是不会显示出来的,可以参考这篇文章获取GB2312的所有中文:https://blog.csdn.net/weixin_44480167/article/details/120605651
二、使用window自带字体
FreeTypeFontGenerator generator = new FreeTypeFontGenerator(Gdx.files.local("C:\\Windows\\Fonts\\simsun.ttc"));// 宋体
FreeTypeFontGenerator.FreeTypeFontParameter parameter = new FreeTypeFontGenerator.FreeTypeFontParameter();
parameter.size = 32;
parameter.characters = "凌康123水电费了看奥斯陆家发生";
BitmapFont bitmapFont = generator.generateFont(parameter);
Label.LabelStyle font = new Label.LabelStyle(bitmapFont, Color.WHITE);
Label label = new Label("凌康123水电费了看-characters没有的内容是不会显示的", font);
label.setPosition(20, 200);
stage.addActor(label);
// 注意内存溢出
generator.dispose();
效果,不能发现,生成参数的字符串内没有的内容是不能显示的:
window自带的字体库丰富!但是也有缺点,每次都生成要注意内存溢出,适合固定字体的场景。
打赏
创作不易,觉得内容不错就赏作者一杯咖啡吧!(恰饭)
后续我会出更多libgdx文章:寻路、寻路算法、打怪,以RPG的视角。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 【.NET】调用本地 Deepseek 模型
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· DeepSeek “源神”启动!「GitHub 热点速览」
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库
· 我与微信审核的“相爱相杀”看个人小程序副业