カスタムフォント
libGDXではボタン等のUI要素にテキストを表示することが出来ますが、デフォルトのフォントだと日本語には対応していません。日本語を表示する際には、FreeTypeFontGeneratorを使う必要があります。
Gradle設定
新しいプロジェクトを作る場合は、gdx-setup.jarを開いてOfficial ExtensionsからFreeTypeにチェックを入れればOKです。
既存のプロジェクトに追加する場合は、build.gradleに以下のように追記します。
Core Dependency
implementation "com.badlogicgames.gdx:gdx-freetype:$gdxVersion"
Desktop Dependency
implementation "com.badlogicgames.gdx:gdx-freetype-platform:$gdxVersion:natives-desktop"
Android Dependency
implementation "com.badlogicgames.gdx:gdx-freetype:$gdxVersion"
natives "com.badlogicgames.gdx:gdx-freetype-platform:$gdxVersion:natives-armeabi-v7a"
natives "com.badlogicgames.gdx:gdx-freetype-platform:$gdxVersion:natives-arm64-v8a"
natives "com.badlogicgames.gdx:gdx-freetype-platform:$gdxVersion:natives-x86"
natives "com.badlogicgames.gdx:gdx-freetype-platform:$gdxVersion:natives-x86_64"
IOS Dependency
implementation "com.badlogicgames.gdx:gdx-freetype-platform:$gdxVersion:natives-ios"
これで下準備は完了です。注意点として、FreeTypeFontはHTMLアプリケーションには対応していません。
FreeTypeFontの使い方
基本的な使い方です。
val fontGenerator = FreeTypeFontGenerator(Gdx.files.internal("font/japanese.ttf"))
val parameter = FreeTypeFontParameter().apply {
size = 24
incremental = true
}
val font = fontGenerator.generateFont(parameter)
- 使えるフォントファイルは.ttf形式のものです。
- parameterで細かい要素を指定出来ます。フォントの枠線や影の設定なども出来ます。
- 日本語など、デフォルトで非対応の文字を表示する場合はincrementalを必ずtrueに設定してください。
- 最後に、fontを生成して、ButtonStyleに適用するなり、Skinに追加するなりしてください。
使う文字が数個程度の場合、FreeTypeFontParameterのcharacterフィールドにそれらの文字を結合した文字列を指定することで描画することが出来ます。
一方、日本語を描画する際のような、大量の文字を描画する必要がある場合、characterにすべての文字を繋いで…というのは現実的では有りません。このような場合はincrementalをtrueに設定することで文字を適宜追加してくれます。
フォントファイルのパス指定には大文字、数字は使えないようです。ただ、調べてみると大文字は使えるが数字が使えない。といった症状もあり、現状詳しいことはわかりません。すべて小文字で指定するのが無難そうです。