PlayN の v1.3.1 を使用しています。この問題は、次の Google グループ スレッドで議論されていますが、提案された提案を実装する方法がわかりません。
https://groups.google.com/forum/?fromgroups#!topic/playn/kiE2iEYJqM0
おそらく、誰かがサンプルコードを提供できるでしょう。現在、この回答のHTML リンクで参照されている手法に従っています。
https://stackoverflow.com/a/9116829/1093087
私の問題: ゲームのホーム画面で、読み込まれたフォントを使用してテキストを表示します。Java版では正常に動作します。ただし、HTML 版では、最初はテキストが表示されません。次の画面で、または後でホーム画面に戻ると、テキストが正しく表示されます。そのため、Google グループのスレッドで説明されているように、フォントの非同期読み込みが原因であると結論付けました。
私の救済策は、画像を数秒間表示するスプラッシュ スクリーンを追加することでした。これにより、テキストが表示された画面にリダイレクトされる前に、フォントが読み込まれる機会が与えられました。しかし、どれだけ遅延を設定しても、テキストは表示されません。
ゲームとフォントをロードする HTML ファイルは次のとおりです。
<!DOCTYPE html>
<html>
<head>
<title>mygamePlayn</title>
<!-- fonts -->
<style>
@font-face {
font-family: "DroidSans-Bold";
src: url(mygame/fonts/DroidSans-Bold.ttf);
}
@font-face {
font-family: "UbuntuMono";
src: url(mygame/fonts/UbuntuMono-Bold.ttf);
}
</style>
</head>
<body bgcolor="black">
<script src="mygame/mygame.nocache.js"></script>
</body>
</html>
最初に表示されないテキストを生成するコア Java コードを次に示します (ただし、それ以外の場合は機能します)。
public static CanvasImage generateTextImage(String text, String fontName,
Integer fontSize, Integer fontColor, Style fontStyle, Integer padding) {
Font font = graphics().createFont(fontName, fontStyle, fontSize);
TextFormat fontFormat = new TextFormat().withFont(font).withTextColor(fontColor);
TextLayout layout = graphics().layoutText(text, fontFormat);
Integer width = (int) layout.width() + padding * 2;
Integer height = (int) layout.height() + padding * 2;
CanvasImage textImage = graphics().createImage(width, height);
textImage.canvas().drawText(layout, padding, padding);
return textImage;
}