1

編集これはhttps://github.com/threerings/playn/commit/137ce50dddd2716f84c38ec1568d7ae5a368434bで修正されたバグでした。詳細については、ParEklundの回答を参照してください。

始める前に:私は一般的にゲームプログラミングの初心者なので、使用しているツールについて根本的な誤解を持っている可能性が非常に高いです。しかし、私は私の質問を推し進めます...

メソッド中にサーフェスレイヤーに何かを描画しようとするとpaint、黒い画面が表示されます。initメソッド中に描画すると、OKと表示されます。

ここで、 SurfaceLayerバナーの下にあるコードを複製しようとしています。問題のコードは次のとおりです。

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);
  }
}

私はPlayN1.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プロジェクトを作成し、ペイントメソッドで正常にレンダリングされるまったく同じコードを使用すると(まったく同じコードを使用している場合、PlayNWebサイトがその例で使用しているバージョンがわかりません)コード...)。

私はここで何を逃しましたか?1.4はSurfaceLayerとの関係を変更しましたが、今は別の方法で使用する必要がありますか?ありがとう。

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 に答える