StoryEdit 開発日誌

ウェブアプリ StoryEditを作ってましたが延期。普通のブログ。

slick2dで日本語フォント 〜苦戦〜

slick2dを使ってみて、いきなり壁にぶちあたる。日本語がdrawできない。笑

いろいろ調べていくと,UnicodeFontというクラスからフォントを読み込むらしい。しかし,これを作っても,日本語は描画されなかった。(すくなくとも今の知識ではだめだった)

そこで,ObsoleteなTrueTypeFontを使うことに。
しかしなんともクソな仕様で,使用する文字を一文字ずつ,記述しておかなければならない。
これは,どうやらon-the-flyでロードするためのようだ。
一気にフォントセットを読み込むとメモリを圧迫してしまうことへの配慮だろう。
まぁ一応,これでうごいているからよしとするか、、、てかUnicodeFontよりもAngelFontを使えみたいな話もあるし、、、どれが正しいのだ?笑

以下,サンプルとスクリーンショット

package mygame;

import org.newdawn.slick.AppGameContainer;
import org.newdawn.slick.BasicGame;
import org.newdawn.slick.GameContainer;
import org.newdawn.slick.Graphics;
import org.newdawn.slick.SlickException;
import org.newdawn.slick.TrueTypeFont;
import org.newdawn.slick.UnicodeFont;
import org.newdawn.slick.font.effects.ColorEffect;

import java.awt.Font;

public class Sample extends BasicGame {
	TrueTypeFont font;
	public Sample(String title) {
		super(title);
		// TODO Auto-generated constructor stub

	}

	@Override
	public void render(GameContainer container, Graphics g) throws SlickException {
		g.setFont(font);
		g.drawString("hello world!",200,200);
		g.drawString("here:" +
				"てすと", 200, 250);
		
	}

	@Override
	public void init(GameContainer container) throws SlickException {
		Font awtfont = new Font("migmix-1m-regular", Font.BOLD, 20);
		char[] additionalChars = {'て', 'す', 'と'};
		font = new TrueTypeFont(awtfont, true, additionalChars);
	}

	@Override
	public void update(GameContainer container, int delta) throws SlickException {
		// TODO Auto-generated method stub

	}

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Sample game = new Sample("mygame");
		AppGameContainer container;
		try {
			container = new AppGameContainer(game);
			container.start();
		} catch (SlickException e) {
			// ignore
		}
	}

}

そしてこちらができあがり。

f:id:welovy:20130116204839p:plain