gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 09:38:31 25 4
gpt4 key购买 nike

我正在开发一个应用程序,我需要在其中绘制 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com