サイトのトップへ戻る

libGDX ドキュメント 日本語訳

サイト内検索

Gdx freetype



はじめに

ゲームでテキストを描写したい場合は、通常はBitmapFontを使用します。 しかし、これには欠点があります。:

  • BitmapFont は画像に依存しているので、違うサイズの文字を使用する場合はBitmapFontを拡大する必要があり、見た目が汚くなってしまう。

ゲームで必要なサイズのうち最も大きなBitmapFont だけを用意すれば、BitmapFont を拡大する必要は無く縮小だけをすれば良くなりますね? はい、確かにそれは正しいです。しかし、そうしたBitmapFont を使うと、同程度の TrueType Font (.ttf)の2倍のディスク容量を軽々と消費してしまいます。 さあ、あなたのゲームで使う全てのBitmapFont の最大サイズのものを用意し、さらにゲームでは10個の異なるフォントを使う状況を考えてください... しかもAndrodi端末。 ディスク容量は吹っ飛びます!

この問題を解決するのが、gdx-freetype 拡張機能です:

  • ゲームに軽量な .ttf ファイルのみを添付する
  • 必要なサイズの BitmapFont をすぐに生成する
  • ユーザーはゲームに独自のフォントを使用することが可能


詳細

これは拡張機能なので、既定ではLibGDX プロジェクトに含まれていません。拡張機能を追加する方法は、プロジェクトの設定によって異なります。



プロジェクトにgdx-freetype を導入する方法

Gradleを使っているプロジェクトの場合

プロジェクトを新規作成する場合は、セットアップUIのextensions 配下にあるFreetype オプションを選択するだけです。

既存のGradle プロジェクトに追加するには、 Dependency management with Gradleを参照してください。

Gradleを使っていないプロジェクトの場合

gdx-freetypeを持っていない場合は、最新の nightly buildをダウンロードしてください。

libgdx-nightly-latest.zip/extensions/gdx-freetype を開いて、以下を行います。:

  • gdx-freetype.jar を取り出して core プロジェクトの libs フォルダーに置く
  • gdx-freetype.jar を coreプロジェクトと android プロジェクトと desktop プロジェクトにリンクする
  • gdx-freetype-natives.jar を取り出して desktop プロジェクトの libs フォルダーに置く
  • gdx-freetype-natives.jar を desktop プロジェクトにリンクする
  • armeabi/libgdx-freetype.so を android プロジェクトの libs/armeabi フォルダーにコピーする
  • armeabi-v7a/libgdx-freetype.so をandroid プロジェクトの libs/armeabi-v7a フォルダーにコピーする

これで準備が整いました。



コード上で gdx-freetype を使用する方法

コード内で gdx-freetype 拡張機能を使用するのは本当に簡単です。

FreeTypeFontGenerator generator = new FreeTypeFontGenerator(Gdx.files.internal("fonts/myfont.ttf"));
FreeTypeFontParameter parameter = new FreeTypeFontParameter();
parameter.size = 12;
BitmapFont font12 = generator.generateFont(parameter); // font size 12 pixels
generator.dispose(); // don't forget to dispose to avoid memory leaks!

FreeTypeFontParameterの既定値は以下のとおりです:

/** The size in pixels */
public int size = 16;
/** Foreground color (required for non-black borders) */
public Color color = Color.WHITE;
/** Border width in pixels, 0 to disable */
public float borderWidth = 0;
/** Border color; only used if borderWidth > 0 */
public Color borderColor = Color.BLACK;
/** true for straight (mitered), false for rounded borders */
public boolean borderStraight = false;
/** Offset of text shadow on X axis in pixels, 0 to disable */
public int shadowOffsetX = 0;
/** Offset of text shadow on Y axis in pixels, 0 to disable */
public int shadowOffsetY = 0;
/** Shadow color; only used if shadowOffset > 0 */
public Color shadowColor = new Color(0, 0, 0, 0.75f);
/** The characters the font should contain */
public String characters = DEFAULT_CHARS;
/** Whether the font should include kerning */
public boolean kerning = true;
/** The optional PixmapPacker to use */
public PixmapPacker packer = null;
/** Whether to flip the font vertically */
public boolean flip = false;
/** Whether or not to generate mip maps for the resulting texture */
public boolean genMipMaps = false;
/** Minification filter */
public TextureFilter minFilter = TextureFilter.Nearest;
/** Magnification filter */
public TextureFilter magFilter = TextureFilter.Nearest;

例:

parameter.borderColor = Color.BLACK;
parameter.borderWidth = 3;

parameter.shadowColor = Color.BLACK;
parameter.shadowOffsetX = 3;
parameter.shadowOffsetY = 3;

また、AssetManagerを使ったFreeType 拡張機能で生成したBitmapFontを読み込むこともできます。 詳細はFreeTypeFontLoaderTestを参照してください。



表示される警告に関する最新情報

http://www.badlogicgames.com/wordpress/?p=2300からの引用:

  • アジアの文字は動作する “かもしれません” が、警告が表示されるでしょう。アジアの文字は非常にたくさんのグリフを文字しているだけです。これの修正については、現在考え中です。
  • アラビア語のように右から左へ表記される文字は動作しません。BitmapFontとBitmapFontCache のレイアウト“アルゴリズム”はこれを制御する方法を知りません。
  • FreeType で使うフォントをいい加減に選ぶのはよろしくありません。ネット上にあるフォントの中には酷く汚く、使う際のヒントとなるような情報も無く、見た目も酷いです。

サンプルをダウンロードしてください