ShapeRenderer 不绘制在运行时添加的新线

ShapeRenderer not drawing new lines added during runtime

TL;DR 我的 ShapeRenderer 会渲染线条,但只是有时。

我看过这些帖子:LibGDX: ShapeRenderer drawing... nothing, , and 。我遇到了同样的问题,但其中 none 有答案。我希望有人能发现我做错了什么

我有两个 类,一个 ApplicationListener A 和一个 GestureListener B。在 ApplicationListener A 中,我有一个全局 ArrayList<StarPair> pairs,我在 Acreate() 方法中实例化了它。 A 也有一个实例化的 ShapeRenderer draw。在我的渲染循环中,我有以下代码:

// Render lines
cam.update();
draw.setProjectionMatrix(cam.combined);
draw.begin(ShapeRenderer.ShapeType.Line);
draw.setColor(Color.GREEN);
for(StarPair pair : pairs)
    draw.line(pair.v1, pair.v2);
draw.end();

当我从 create() 方法中将随机星对对象放入列表时,效果很好。

我想要的行为是让列表开始为空,并让来自 BtouchDown() 事件添加一个 StarPair 对象到配对列表,然后由 draw.

呈现

touchDown() 中,我创建了一个虚拟 StarPair newPair 并将其添加到 pairs 中:gazer.pairs.add(newPair);,其中 gazer 是 A[ 的实例=48=] 具有 ShapeRenderer draw。当我调试并在 render() 中放置一个条件断点时,我可以看到它被添加到 pairs 中,该断点仅在 gazer.pairs.add(newPair); 上的断点之后命中列表从大小 0 增长到大小 1。坐标在 v1 和 v2 中,正如我所期望的那样,但是新行永远不会在我的屏幕上开始呈现,尽管它们是列表中的 StarPair。

有人知道为什么吗?

我添加到列表末尾的 newPair 对象在每次调用 touchDown 时都被设置为 new StarPair(),但它被声明为全局变量,所以我的 ApplicationListener 中的 pairs 列表正在获取对立即被清除的对象的引用 - 因此没有线条图。将 newPair 设置为 touchDown() 本地解决了这个问题。

TL;DR 我错了,不是 libGDX