ShapeRenderer未在运行时添加新行

时间:2015-05-09 04:26:29

标签: java android libgdx

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

我看过这些帖子:LibGDX: ShapeRenderer drawing... nothingLibgdx NESTED ShapeRenderer not drawing lineshttps://stackoverflow.com/questions/28800505/libgdx-shaperenderer-not-drawing-in-loop。我有同样的问题,但没有人有答案。我希望有人能发现我做错了什么

我有两个类,一个是ApplicationListener A ,另一个是GestureListener B 。在ApplicationListener A中,我有一个全局ArrayList<StarPair> pairs,我在 A create()方法中进行实例化。 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()方法中将随机星对对象放入列表时,哪个工作正常。

我希望的行为是让列表开始为空,让 B 中的touchDown()事件将StarPair对象添加到对列表中,然后再将其呈现由draw

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

有谁知道为什么?

1 个答案:

答案 0 :(得分:1)

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

TL; DR我的错误,不是libGDX