2016-07-28 7 views
0

私は自分のスプライトのトレースを描画する必要があるアプリケーションに取り組んでいます。私はShapeRendererを使ってそれをやろうとしましたが、線は正しく描画されますが、線が描画された後、線は再び消去されます。だから私はポリラインでそれをやろうとしましたが、それぞれの更新でポイントを追加しましたが、しばらくしてからこのポリラインを描くには大きすぎます。libGdx:ステージ上に線を描画してそこに保持する

すべての描画呼び出しでスプライトが移動したかどうかを確認するオーバーライドされたActorクラスにコードがあります。スプライトが移動したかどうかを確認し、そうであれば、ShapeRendererで描画します。その行を維持する方法はありますか?

コード:

ShapeRenderer renderer = StageActivity.stageListener.shapeRenderer; 
renderer.setColor(color); 
Gdx.gl.glLineWidth(strokeWidth); 
line.add(sprite.look.getX()); 
line.add(sprite.look.getY()); 
renderer.polyline(getLineVertices()); 

getLineVertices()メソッドは、単にフロート[]配列に自分のArrayListに変換されます。

編集:上記のコードは、行の多くの非常に悪いパフォーマンスを持っているので

は、私は私が必要なものを本質的にフレームバッファを(と思う)試してみたが、それは描画取得していない、私は何間違っている?

buffer.begin(); 
renderer.begin(ShapeRenderer.ShapeType.Line); 
renderer.line(previousPoint.x, previousPoint.y, sprite.look.getX(), sprite.look.getY()); 
renderer.end(); 
buffer.end(); 
batch.draw(buffer.getColorBufferTexture(), 0, 0); 

バッファは、私の俳優のグローバル変数です。行を更新して描画する必要があるとき

+0

何が間違っているかを確認できるようにコードを追加してください。 –

答えて

0

私の問題をフレームバッファで解決しました。私はframebuffer.getColorBufferTexture()を呼び出す前にbatch.end()を呼び出さなければならなかったので、レンダリングしていませんでした。

1

あなたはまた、すべての行のすべての時間を描いていない考慮

Array<Vector2> lines = new Array<Vector2>(); 

    ... 

    //when you need to draw next line you just update lines array 
    lines.add(new Vector2(sprite.look.getX(), sprite.look.getY())); 

    //and in your render method you're just rendering these lines independently 
    if(lines.size() > 1) { //one point is not a line 
     for(int i = 1; i < lines.size(); i++) 
      renderer.line(lines.get(i-1), lines.get(i)); 
    } 

独立して自分のrender方法でこれらのコレクションからいくつかのコレクションにラインポイントを維持する必要があります - 場合とにかくパフォーマンスの問題があると思われます。

+1

カメラが動かない場合、定期的に 'lines'配列をFBOにフラッシュし、FBOをバックグラウンドとして描画することができます。 – Tenfour04

+0

yupは、行数が多いとさらに優れているようです。 –

+0

これは本質的に私がrender.polylineで行ったことですが、あなたが言ったように、より多くのポイントはパフォーマンスが悪いことを意味します。 –

関連する問題