修改这是https://github.com/threerings/playn/commit/137ce50dddd2716f84c38ec1568d7ae5a368434b中已修复的错误。有关详细信息,请参阅Par Eklund的答案。
在开始之前:我一般都是游戏编程的新手,因此我很可能对我使用的工具有一个基本的误解。但是我会继续提出我的问题......
每当我在paint
方法中尝试在Surface Surface上绘制某些东西时,我都会看到黑屏。如果我在init
方法中绘制它会显示OK。
我正在尝试复制 Surface Layer banner here下的代码。有问题的代码是:
public void paint() {
// Draw 100 random peas imperatively.
surf.clear(0);
for (int i = 0; i < 100; ++i) {
int x = (int)(random() * WIDTH);
int y = (int)(random() * HEIGHT);
surf.drawImage(pea, x, y);
}
}
我正在使用PlayN 1.4,因为该代码与我正在编写的内容不直接匹配,我认为我至少有相同的(除了我正在绘制白色矩形):
public void paint(final float alpha) {
surfaceLayer.surface().clear();
surfaceLayer.surface().setFillColor(Color.rgb(255, 255, 255));
for (int i = 0; i < 100; ++i) {
int x = (int) (Math.random() * width);
int y = (int) (Math.random() * height);
surfaceLayer.surface().fillRect(x, y, 5, 5);
}
}
屏幕上没有任何内容。如果我将该代码移动到init
方法中,它会按预期呈现。
现在有趣的是如果我制作PlayN 1.3.1项目并使用完全相同的代码它会在paint方法中呈现正常(假设我仍在使用相同的代码我不确定PlayN网站在其示例代码中使用的是什么版本......)。
我错过了什么? 1.4已经改变了与Surface Layer有关的东西,我现在必须以不同的方式使用它吗?感谢。
答案 0 :(得分:1)
我基本上是游戏编程的新手,我和PlayN 1.5-SNAPSHOT一样遇到了和你一样的问题(至少相同的症状)。我在这里提出了一个问题:http://code.google.com/p/playn/issues/detail?id=205
另外,我的经验是,它似乎与渲染是在init-还是paint方法中完成无关。相反,似乎渲染只能成功_first_time_(第一帧渲染发生)。请参阅问题中的附件以获取(某种程度上)最小的示例。
就像我在这个问题中所说的那样,我怀疑这与GL20的实现以及如何管理帧缓冲有关,但考虑到我对OpenGL更是一个新手,你应该把我的猜测带到一大堆盐。
PlayN的主要贡献者应该能够快速回答并解决这个问题。让我们希望我们很快得到他们的关注。 :)