2016-07-28 66 views
0

我正在研究一個應用程序,在那裏我需要繪製我的精靈的軌跡。我試圖用ShapeRenderer來完成它,並且它能夠正確地繪製線條,但是在繪製線條之後,它會再次被擦除。所以我試圖用Polyline來做,並在每次更新時添加Points,但過了一段時間後,這條折線太大而無法繪製。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); 

緩衝區是我的Actor中的全局變量。

+0

請添加您的代碼,以便我們檢查是否有問題。 –

回答

0

我解決了我的問題與幀緩衝區。這不是渲染,因爲我必須在調用framebuffer.getColorBufferTexture()之前調用batch.end()。

1

你應該保持線點在某些集合時,有必要更新和借鑑這些集合線在render方法獨立

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

也可以考慮不拉絲所有行所有的時間 - 如果線數會非常大(如數千)無論如何,你將會有性能問題 - 繪圖是相當昂貴的操作

+1

如果相機不移動,您可以定期將'線條'陣列刷新到FBO,並將FBO作爲背景。 – Tenfour04

+0

yup似乎更適合用大量的行 –

+0

這實際上就是我用render.polyline所做的,但正如你所說的,更多的點意味着糟糕的表現。 –

相關問題