在绘制方法期间无法渲染SurfaceLayer

时间:2012-07-28 23:24:58

标签: playn

修改这是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有关的东西,我现在必须以不同的方式使用它吗?感谢。

1 个答案:

答案 0 :(得分:1)

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

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

就像我在这个问题中所说的那样,我怀疑这与GL20的实现以及如何管理帧缓冲有关,但考虑到我对OpenGL更是一个新手,你应该把我的猜测带到一大堆盐。

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