天天看点

libGDX游戏开发之字体样式(七)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
           
libGDX游戏开发之字体样式(七)libGDX游戏开发之字体样式(七)

导出保存

libGDX游戏开发之字体样式(七)libGDX游戏开发之字体样式(七)

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

libGDX游戏开发之字体样式(七)libGDX游戏开发之字体样式(七)

二、使用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();
           

效果,不能发现,生成参数的字符串内没有的内容是不能显示的:

libGDX游戏开发之字体样式(七)libGDX游戏开发之字体样式(七)

window自带的字体库丰富!但是也有缺点,每次都生成要注意内存溢出,适合固定字体的场景。

libGDX游戏开发之字体样式(七)libGDX游戏开发之字体样式(七)

打赏

创作不易,觉得内容不错就赏作者一杯咖啡吧!(恰饭)

libGDX游戏开发之字体样式(七)libGDX游戏开发之字体样式(七)

后续我会出更多libgdx文章:寻路、寻路算法、打怪,以RPG的视角。