繁体   English   中英

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

[英]libGdx: Draw Line on Stage and keep it there

我正在开发一个应用程序,需要在其中绘制我的Sprites的痕迹。 我尝试使用ShapeRenderer进行此操作,它可以正确绘制线条,但是在绘制线条之后,它将再次被擦除。 因此,我尝试使用折线进行此操作,并在每次更新时添加点,但是一段时间后,此折线太大了,无法绘制。

我将代码放在重写的Actor类中,该类在每个draw调用中检查精灵是否已移动,如果已移动,则使用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 []数组。

编辑:

由于上面的代码在很多行中的性能非常差,因此我尝试了帧缓冲,这实际上是我需要的(我认为),但是它没有绘制,我在做什么错?

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

Buffer是我的Actor中的全局变量。

当有必要在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));
    }

还请考虑不要一直画所有的线-如果线的数量很大(例如数千条),那么您仍然会遇到性能问题-绘制是相当昂贵的操作

我用帧缓冲解决了我的问题。 它没有渲染,因为我必须在调用framebuffer.getColorBufferTexture()之前先调用batch.end()。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM