我正在使用 PlayN 的 v1.3.1。此问题在以下 google groups 线程中进行了讨论,但我不确定如何实施所提出的建议:
https://groups.google.com/forum/?fromgroups#!topic/playn/kiE2iEYJqM0
也许有人可以提供一些示例代码。目前,我正在遵循此答案中HTML 链接中引用的技术:
https://stackoverflow.com/a/9116829/1093087
我的问题:在我的游戏主屏幕上,我使用加载的字体显示了一些文本。在 Java 版本中运行良好。但是,在 HTML 版本中,最初不会显示文本。在下一个屏幕上,或者如果我稍后返回主屏幕,文本会正确显示。所以我得出的结论是,这是由于 google groups 线程中讨论的字体的异步加载造成的。
我的补救措施是添加一个启动画面,显示几秒钟的图像,让字体有机会加载,然后重定向到带有文本的屏幕。但是无论我设置延迟多长时间,文本仍然不显示。
这是加载我的游戏和字体的 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;
}