TL; DR My ShapeRenderer将渲染线条,但仅在某些时候。
我看过这些帖子:LibGDX: ShapeRenderer drawing... nothing,Libgdx NESTED ShapeRenderer not drawing lines和https://stackoverflow.com/questions/28800505/libgdx-shaperenderer-not-drawing-in-loop。我遇到了同样的问题,但是他们都没有答案。我希望有人能发现我做错了什么
我有两个类,一个ApplicationListener A和一个GestureListenerB。在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是具有ShapeRenderer draw
的A的实例。我调试并在pairs
中放置条件断点并将其添加到render()
时,将其添加到gazer.pairs.add(newPair);
中,该条件断点仅在上的断点之后命中。列表从大小0增长到大小1。v1和v2中的坐标为我希望它们是,但是尽管它们是列表中的“ StarPair”,但新行从未开始在屏幕上呈现。有谁知道为什么吗?
最佳答案
我添加到列表末尾的newPair
对象在每次调用new StarPair()
时都设置为touchDown
,但是它被声明为全局变量,因此我的pairs
中的ApplicationListener
列表正在获得对要立即清除的对象的引用-因此没有线条画。将newPair
本地化为touchDown()
可解决此问题。
TL; DR我的错误,不是libGDX