LWJGFont ver 1.0 を公開しました
2014/2/25 に、LWJGFont ver 1.0 をリリースしました。LWJGFont はお手持ちのフォントを使って手軽に文字列表示をするための LWJGL のサードパーティライブラリです。あらかじめ任意のフォントを任意のサイズで画像イメージに描き出しておき、実行時にはそれを切り貼りすることで文字列を表示させます。
特に LWJGL で日本語表示(テクスチャーマッピング)する際の壁となる日本語文字画像の用意、日本語文字画像の切り貼り作業をサポートしているため、java.awt.Graphics.drawString() の感覚で文字列を表示することができます。LWJGFont は等幅フォントに加え、プロポーショナルフォントにも対応しています。プロポーショナルフォントは文字によって文字幅が異なるため、手動でテクスチャーマッピングしようとすると手間がかかりますが、LWJGFont ではプロポーショナルフォントの文字幅についても自動計算して表示するため、手軽に綺麗な文字列表示を実装することができます。
2014/03/02 追記
LWJGFont ver 1.1 がリリースされています。Windows 環境での不具合を修正した安定版となりますので、そちらをご利用ください。
ダウンロード
LWJGFont は公式ページからダウンロードすることができます。また、maven をご利用の方は、pom.xml に以下の設定を追加することで入手できます。
<dependencies> ... <dependency> <groupId>net.chocolapod</groupId> <artifactId>lwjgfont</artifactId> <version>1.0</version> </dependency> ... </dependencies>
LWJGFont のしくみ
簡単に LWJGFont のしくみについて触れておきたいとおもいます。LWJGFont は任意のフォントで、アルファベット、ひながなカタカナ、数字、常用漢字約 2000 文字をすべて描きこんだ画像ファイルを生成します。また、画像ファイルのどこにどの文字が書き込まれているかというマッピング情報を持ち、実際に Java プログラムから各文字を表示するための class ファイルも作り出します。これらのファイルを jar ファイルにまとめるので、LWJGFont と LWJGFont が生成した jar ファイルをクラスパスに追加することで、LWJGL から好きなフォントでの文字列表示ができるようになります。
詳しい使い方についてはチュートリアルを用意しましたのでそちらをご覧下さい。
LWJGFont チートシート
LWJGFont で可能となる文字列表示について、ソースコードもあわせてご紹介します。ここでは、LWJGFont で、TkaishoGt01H32Font というフォントクラスを生成し、利用する場合の例です。
LWJGFont ver 1.1 以降では、フォントクラスの抽象クラスが AbstractFont から LWJGFont に変更されています。
ver 1.1 以降をご利用の方は、下記サンプルコード内の AbstractFont を LWJGFont に読み替えてください。
ver 1.1 以降をご利用の方は、下記サンプルコード内の AbstractFont を LWJGFont に読み替えてください。
文字列を表示する
指定の座標に文字列を表示します。一番シンプルな使い方です。// LWJGFont でフォントを読み込む AbstractFont font = new TkaishoGt01H32Font(); // LWJGFont で文字列を表示する font.drawString("いろはにほへと ちりぬるを", 100, 50, 0);
文字列を色を付けて表示する
AbstractFont.setColor() を呼び出すことで、任意の色を RGB 値で設定できます。色の各要素は 0f 〜 1f で指定します。
// LWJGFont でフォントを読み込む AbstractFont font = new TkaishoGt01H32Font(); // LWJGFont の描画色を設定する font.setColor(0.75f, 0.3f, 0.3f); // LWJGFont で文字列を表示する font.drawString("いろはにほへと ちりぬるを", 100, 50, 0);
文字列を透過表示する
AbstractFont.setAlpha() を呼び出すことで、任意のアルファ値を透過色として設定できます。アルファ値も色の各要素と同じように 0f 〜 1f で指定します。
// LWJGFont でフォントを読み込む AbstractFont font = new TkaishoGt01H32Font(); // LWJGFont の透過色を設定する font.setAlpha(0.4f); // LWJGFont で文字列を表示する font.drawString("いろはにほへと ちりぬるを", 100, 50, 0);
文字列を折り返し表示する
AbstractFont.drawParagraph() は、指定した表示幅内で文字列が収まるように、折り返しながら文字列を表示します。表示幅は 第 5 引数で指定することができます。
// LWJGFont でフォントを読み込む AbstractFont font = new TkaishoGt01H32Font(); // LWJGFont で文字列を指定幅で折り返し表示する font.drawParagraph("いろはにほへと ちりぬるを わかよたれそ つねならむ\nうゐのおくやま けふこえて あさきゆめみし ゑひもせす", 100, 150, 0, 450);
文字列を右詰めで折り返し表示する
AbstractFont.drawParagraph() の第 6 引数に AbstractFont.ALIGN を指定することで、折り返し表示する際に文字列を寄せる方向を指定できます。AbstractFont.ALIGN.RIGHT を指定すると右詰めに、AbstractFont.ALIGN.CENTER を指定すると中央揃えになります。
// LWJGFont でフォントを読み込む AbstractFont font = new TkaishoGt01H32Font(); // LWJGFont で文字列を右詰めで折り返し表示する font.drawParagraph("いろはにほへと ちりぬるを わかよたれそ つねならむ\nうゐのおくやま けふこえて あさきゆめみし ゑひもせす", 100, 150, 0, 450, AbstractFont.ALIGN.RIGHT);
文字列の表示幅を取得する
文字列を表示する際にどれだけの表示幅が必要になるかを計算することもできます。// LWJGFont でフォントを読み込む AbstractFont font = new TkaishoGt01H32Font(); // 文字列の表示幅を取得する int stringWidth = font.stringWidth("いろはにほへと ちりぬるを");
LWJGFont 開発 コメント (1) 2014/02/25 08:39:05