在我的LibGDX游戏的HTML5版本中,有时 canvas.toDataUrl("image/png")
会返回一个截断的字符串,从而产生黑色图像。
CanvasElement canvas = ((GwtApplication)Gdx.app).getCanvasElement();
String dataUrl = canvas.toDataUrl("image/png");
Window.open(dataUrl, "_blank", "");
奇怪的是,有时候它有效。当它工作时,我按预期得到一个~100KiB的图像,新的窗口打开,地址栏只是说"数据:"。我可以将它发送到web服务并从Base64转换为适当的PNG字节,OSX预览也显示它也很好。
当没有工作时,新窗口显示正确尺寸的黑色图像,以及带有Base64编码数据的地址栏(开始data:image/png;base64,iVBORw0KGgoAAAAN
... ),但结束于似乎由浏览器UI呈现而不是实际数据字符串中的三个句点的省略号。这种情况下的数据是~31KiB。当我尝试通过我的webservice转码时,我得到了相同的黑色矩形。
我在Chome和Firefox中都看到了这种情况。
有什么想法吗?获取画布内容的代码非常简单,所以我无法看到我是如何做错的。我想到浏览器中的错误,或LibGDX和渲染的某种时间问题?
答案 0 :(得分:0)
这是由LibGDX不保留绘图缓冲区引起的。 LibGDX的家伙非常友好地修复了这个现在可用的夜间版本。
更新到1.0-SNAPSHOT
的最新版本并设置以下标志现在可靠地运行:
@Override
public GwtApplicationConfiguration getConfig () {
if(config == null)
{
config = new GwtApplicationConfiguration(1280, 960);
config.preserveDrawingBuffer = true;
}
return config;
}