TL; DR我的ShapeRenderer会渲染线条,但有时只会。
我看过这些帖子:LibGDX: ShapeRenderer drawing... nothing,Libgdx NESTED ShapeRenderer not drawing lines和https://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。
有谁知道为什么?
答案 0 :(得分:1)
我每次调用newPair
时,我添加到列表末尾的new StarPair()
对象被设置为touchDown
,但它被声明为全局变量,因此我的pairs
中的ApplicationListener
列表正在获取对立即清除的对象的引用 - 因此没有绘制线条。将newPair
本地化为touchDown()
解决了这个问题。
TL; DR我的错误,不是libGDX