2016-07-28 5 views
0

내 스프라이트의 트레이스를 그릴 필요가있는 앱에서 작업하고 있습니다. ShapeRenderer를 사용하여 작업하려했으나 선을 올바르게 그립니다. 그러나 선을 그린 후에 다시 지워집니다. 그래서 폴리 라인으로 작업을 시도하고 각 업데이트마다 포인트를 추가했지만 시간이 지나면이 폴리 라인을 그릴 수 없을만큼 커졌습니다.libGdx : 스테이지에서 선 그리기

모든 그리기 호출시 스프라이트가 이동했는지 검사하고, 그렇다면 선이 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

멍청한 줄을 많이 쓰면 더 좋은 생각 인 것 같습니다. –

+0

이것은 본질적으로 제가 render.polyline에서 한 것입니다.하지만 말했듯이, 더 많은 포인트는 나쁜 성능을 의미합니다. –