我使用for循环创建了一堆矩形,然后将它们添加到数组列表中。我教过渲染与从box2d渲染userdata的方式类似。
sr.setProjectionMatrix(camera.combined);
sr.begin(ShapeRenderer.ShapeType.Filled);
for(Rectangle r : rectangles)
sr.rect(r.x, r.y, r.width, r.height);
sr.end();
问题是,在完成for循环之后,矩形不再被渲染了,我知道发生这种情况是因为你没有渲染实际的矩形而只是使用shapeRenderer来绘制一个使用矩形属性的形状。有没有办法像渲染精灵那样做?
答案 0 :(得分:0)
在LibGDX中,Sprite类专门用于使用SpriteBatch进行渲染。它包含一个实际的数据数组,可以直接复制到SpriteBatch的Mesh数据数组中。这就是它拥有自己的draw
方法的原因,与TextureRegion不同。 Sprite中的这个后备数据数组为其提供了 potential 以便更快地绘制,因为只有在移动时才需要重新计算其中的一些数据。
ShapeRenderer不提供任何直接传递网格顶点数据数组的方法。 Rectangle类不是专门为渲染而设计的。如果您只是想要一种更简单的方法来编写绘图代码,您可以继承Rectangle以添加一个方便的方法来直接使用ShapeRenderer绘制它。
public class MyRectangle extends Rectangle {
//... constructors
public void draw (ShapeRenderer shapeRenderer){
shapeRenderer.rect(x, y, width, height);
}
}