1

编辑这是一个已在https://github.com/threerings/playn/commit/137ce50dddd2716f84c38ec1568d7ae5a368434b中修复的错误。有关详细信息,请参阅 Par Eklund 的答案。

开始之前:我一般是游戏编程的新手,所以我很可能对我正在使用的工具有根本的误解。不过我会继续我的问题...

每当我尝试在该paint方法期间在我的表面层上绘制一些东西时,我都会出现黑屏。如果我在该方法期间绘制init它显示正常。

我正在尝试在此处复制Surface Layer横幅下的代码。有问题的代码是这样的:

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 项目并使用完全相同的代码,它在绘制方法期间渲染得很好(鉴于我仍在使用完全相同的代码,我不确定 PlayN 网站在其示例中使用的是哪个版本代码...)。

我在这里错过了什么?1.4 改变了与表面层有关的东西,我现在必须以不同的方式使用它吗?谢谢。

4

1 回答 1

1

我自己基本上是一个游戏编程的新手,我在 PlayN 1.5-SNAPSHOT 中遇到了与您相同的问题(至少相同的症状)。我在这里提交了一个问题:http ://code.google.com/p/playn/issues/detail?id=205

另外,我的经验是,它似乎与渲染是在 init 方法还是在 paint 方法中完成无关。相反,似乎渲染只成功了_first_time_(发生第一帧渲染)。请参阅问题中的附件以获取(有点)最小的示例。

就像我在问题中所说的那样,我怀疑这与 GL20 实现以及如何管理帧缓冲区有关,但鉴于我对 OpenGL 更是一个新手,你应该对我的猜测持怀疑态度。

不过,PlayN 的主要贡献者应该能够很快回答并解决这个问题。让我们希望我们能尽快得到他们的关注。:)

于 2012-07-31T18:48:10.480 回答