2007年04月08日

LWJGLで日本語表示

テクニカルエンジニアの試験まであと1週間ですが、テストが近くなると部屋を片付けたくなる法則と同じように別のことをついつい考えてしまう。と言うことでJavaでのゲーム作成についていろいろ・・・・。

Javaで2Dゲームを作ろうとすると、Java2Dを使うかLWJGLのようなOpenGLを使うようなライブラリを使うことになる。LWJGLはゲーム用にジョイスティック使えたり音楽再生も楽そうなので良い感じなんだけど、英語環境で使うことしか想定していないので不便なこともある。他の人にとっては些細な問題かもしれないけど俺にとっては結構大きな問題だ。

それは何かというと日本語入力と日本語表示。のちのちチャットゲーやMMORPGを作りたいなぁと思って自分にとってはこれらは特に重要な要素になる。SwingでJava2D使ってゲームを作るのであればIMF(Input Method Framework)が使えるので、ゲームの画面内にチャットの入力部分を作成することができる。日本語表示にしても特に問題は無い。2Dをただ表示するだけなら、Java2Dでもかなり高速に描画できる。でも拡大縮小回転や透過を使うとなるとJava2Dではキビシイ。

Java2DはダメとなるとLWJGLになるわけだけど、こっちはこっちでいろいろ問題が・・・。
日本語表示に関しては、LWJGLはOpenGLなので描画するのは全部テクスチャになる。なので文字を出力するだけでもいちいちテクスチャ作成して・・となってややこしくなる。
と言うことで誰かが作ったLWJGL用文字列描画ライブラリ
Yet another glFont
このライブラリはフォントをビットマップに出力したものを用いて出力するタイプのもの。なので事前にフォントの全文字をビットマップファイルに出力する必要がある。その辺の出力は自動でやってくれるツールがある。記事に書いてあるけど日本語の場合はBitmap Font Generatorを使うとできる。

確かにこの方法だと綺麗に高速で文字が描画できて良いんだけど、日本語の場合は全文字のビットマップを作っていたらサイズがめちゃ大きくなる。さらに文字をビットマップに変換してそのファイルを再配布することになるのでフォントのライセンスも心配だ。

後は上の記事にも出てくるけど、Graphics2D使ってメモリに文字を描いて、そのデータからテクスチャを作成して画面に描画って感じか・・・。これも描画するたびに生成すると重すぎるので、文字ごとにキャッシュするようにしないとダメなんだよな。


日本語出力も問題多いけど、LWJGLでの日本語入力も大変だ。LWJGLはウインドウ自体がJavaのウインドウではないので、IMFを使うと言うことができない。一応AWT上でLWJGLを使うことができるので、IMFも使えそうだけど実際にやってみてないのでホントにできるかどうかは不明。さらにこの場合当然ウインドウのみでフルスクリーンにはできないだろう。(AWT使ってもフルスクリーンモードにはできるようだけど、その場合IMFが使えない予感)

ふーむ、LWJGLのおかげでJavaでゲーム作成はだいぶ楽になっただろうけど、海外製ライブラリと言うことで日本語入出力をしたいときはまだまだキビシイ。


C++&DirectXでやるとその辺一気に解決するんだけど、コードを書くのが壮絶にめんどい、特にサーバ。さらにオンラインゲーム用サーバがWindows用のみになってしまう。
クライアントはC++で、ゲームサーバはJavaでと言うのもありかなぁ・・・でもあまりやりたくない。

C++でちょこっとゲームは作ろうとしてみたけど、やっぱC++はめんどくさいのでモチベーションの低下が激しいw
↓テスト的に作ってみたオンラインRPGになる予定だったプログラム(C++とDXライブラリを使用) サーバはC++でSocket使用(DirectPlayはいろいろダメっ子らしいので)
testgame1.PNG
やっぱJavaで作りてぇぇぇ!!

派手な画面効果と透過処理は捨ててJava2Dでゲーム作るか・・・。まずは画面内での日本語入力だな・・・。と言いつつ他に優先度の高い"やりたいこと"があるのでいつできるかは不明だけど。

Trackback on "LWJGLで日本語表示"

このエントリーのトラックバックURL: 

"LWJGLで日本語表示"へのトラックバックはまだありません。

Comment on "LWJGLで日本語表示"

"LWJGLで日本語表示"へのコメントはまだありません。

Post a Comment

コメントする

コメント登録機能が設定されていますが、TypeKey トークンが設定されていません。