TL; DR My ShapeRenderer将渲染线条,但仅在某些时候。

我看过这些帖子:LibGDX: ShapeRenderer drawing... nothingLibgdx NESTED ShapeRenderer not drawing lineshttps://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并将其添加到具有pairsgazer.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

10-04 14:22