java - libGdx:在舞台上画线并将其保留在那里

标签 java android libgdx

我正在开发一个应用程序,我需要在其中绘制 Sprite 的轨迹。我尝试使用 ShapeRenderer 来完成此操作,它可以正确绘制线条,但是绘制线条后,它会再次被删除。因此,我尝试使用折线来完成此操作,并在每次更新时添加点,但一段时间后,这条折线太大而无法绘制。

我的代码位于一个重写的 Actor 类中,该类在每次绘制调用时都会检查 Sprite 是否已移动,如果是,则使用 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);

缓冲区是我的 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));
    }
<小时/>

还要考虑不要一直绘制所有线条 - 如果线条数量非常大(例如数千),无论如何你都会遇到性能问题 - 绘制是相当昂贵的操作

关于java - libGdx:在舞台上画线并将其保留在那里,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38635286/

相关文章:

java - 映射注释有什么用?我需要它吗?(Spring Data ElasticSearch)

java - 按钮不打开新 Activity

Android lint 忽略我的 lint.xml,跳过我尝试启用的检查

java - libGDX:如何将纹理裁剪为圆形

java - SWT:如何让 Composite 自动填充其容器

java - 有人可以解释 SharedPreferences 如何存储字符串集

java - Logback - 布局模式中的自定义级别输入

Android WebView 输入类型 ="text"光标未显示

java - 通过按 Prt Scr 按钮在 LibGDX 中制作屏幕截图

java - LibGDX 相机平滑翻译