libGdx:在舞台上画线并将其保持在那里

时间:2016-07-28 11:39:48

标签: java android libgdx

我正在开发一个应用程序,我需要绘制我的精灵的痕迹。我尝试使用ShapeRenderer来做它,并且它正确地绘制了线,但是在绘制线之后,它再次被擦除。因此我尝试使用折线进行,并在每次更新时添加点,但过了一段时间后,此折线太大而无法绘制。

我的代码在一个重写的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转换为float []数组。

编辑:

由于上面的代码具有非常差的性能和很多行,我尝试了Framebuffer,这本质上是我需要的(我认为),但它没有得到绘制,我做错了什么?

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中的全局变量。

2 个答案:

答案 0 :(得分: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 :(得分:0)

我用framebuffer解决了我的问题。它没有呈现,因为我必须在调用framebuffer.getColorBufferTexture()之前调用batch.end()。