我正在使用 JAVA 使用 LibGDX 创建一个游戏,但我遇到了一个即使经过一周的尝试也无法解决的问题。我有使用 ShapeRenderer 类绘制的形状,并且我有多个相互交互的类和方法。一个形状在屏幕上增长,当用户点击屏幕时,形状停止增长,第二个形状开始增长。
我有一组 ShapeRenderer 和 Polygon,我必须使用不同的 ShapeRenderer 和不同的 Polygon 绘制每个形状。例如,必须使用 ShapeRenderer[1] 和 Polygon[1] 渲染三角形。该级别的下一个三角形必须使用 ShapeRenderer[2] 和 Polygon[2] 绘制。这是为了避免在同一 ShapeRenderer 上绘制多边形时发生冲突的值和旋转。
我的特殊问题是我创建的一个方法,“DrawStar”被赋予一个数字(以 1 开头代表第一颗星)并使用 ShapeRenderer[1] 和 Polygon[1] 绘制该星。这意味着正在绘制第一颗星,然后当我单击屏幕时,理想情况下,第一颗星应该停止生长,第二颗星应该开始使用 ShapeRenderer[2] 和 Polygon[2] 渲染。
这就是问题所在:假设这个特定的关卡已经被编写,以便 2 颗星会增长。方法“DrawStar”将被赋予数字“1”并随着它的增长绘制第一颗星,然后方法“DrawStar”被赋予数字“2”并绘制第二颗星(这在视觉上还不是问题因为星星的多边形从 0 开始,直到第二次点击才增加,所以即使它正在绘制它也不可见)并且它继续同时绘制两颗星星,它基本上在之后绘制该级别的所有星星另一个即 DrawShape(1) 然后 DrawShape(2) 然后 DrawShape(1) 然后 DrawShape(2) 等等。
这是我的代码:
public void drawFiveStar(FiveStar star, int num) {
shapeRenderer[num].begin(ShapeType.Line);
shapeRenderer[num].setColor(Color.RED);
poly[num].setVertices(star.verticiesStar);
poly[num].rotate(1);
poly[num].setOrigin(star.originX, star.originY);
shapeRenderer[num].polygon(poly[num].getTransformedVertices());
shapeRenderer[num].end();
}
Star 表示通过的星形对象,num 表示要绘制的形状编号,如上面使用 ShapeRenderer[1] 和 Polygon[1] 的示例中所述。问题是它会 DrawFiveStar(Star1, 1), DrawFiveStar(Star1, 2), DrawFiveStar(Star1, 1), DrawFiveStar(Star1, 2)....直到我点击鼠标按钮,它移动到下一个星形对象DrawFiveStar(Star2, 1), DrawFiveStar(Star2, 2), DrawFiveStar(Star2, 1), DrawFiveStar(Star2, 2)....
上面代码的问题在于,使用 ShapeRenderer 数组的全部意义在于,对于第二个形状,使用新的、新鲜的 ShapeRenderer。这段代码使第一个星形对象将使用两个 ShapeRenderers,并且当我单击提示第二个星形对象增长时,两个 ShapeRenderer 都已用于绘制第一个星形对象。理想情况下,它应该只有第一个 ShapeRenderer 用于绘制第一个星形对象,然后在第二个对象开始增长时使用第二个 ShapeRenderer 绘制。我尝试了许多解决方案,但都没有产生我刚才描述的理想解决方案的预期结果。
这是一个我无法弄清楚的编程问题,因为代码需要是动态的,因此如果它是 3 或 100 个形状,代码仍然会为每个星形对象使用不同的 ShapeRenderer。同样,这是因为在一个 ShapeRenderer 对象上绘制多个形状并旋转它们会导致非常奇怪的结果,形状到处乱飞,在单独的 ShapeRenderer 对象上绘制多个旋转形状可以解决这个问题。这就是我要在这里实现的目标。
阅读关卡 > 看到有 2 个形状要绘制 > 使用 2 个形状渲染器来绘制这 2 个形状