Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/393.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在Libgdx中渲染多个形状?_Java_Libgdx_Shape Rendering - Fatal编程技术网

Java 如何在Libgdx中渲染多个形状?

Java 如何在Libgdx中渲染多个形状?,java,libgdx,shape-rendering,Java,Libgdx,Shape Rendering,我使用for循环创建了一组矩形,然后将它们添加到数组列表中。我教过,渲染与从box2d渲染用户数据的方式类似 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(); 问题是在fro循环结束后,矩形不再被

我使用for循环创建了一组矩形,然后将它们添加到数组列表中。我教过,渲染与从box2d渲染用户数据的方式类似

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();

问题是在fro循环结束后,矩形不再被渲染,我知道这是因为您没有渲染实际的矩形,而只是使用shapeRenderer使用矩形的属性绘制形状。有没有类似于渲染精灵的方法

在LibGDX中,Sprite类是专门为使用SpriteBatch进行渲染而设计的。它包含一个实际的数据数组,可以直接复制到SpriteBatch的网格数据数组中。这就是它有自己的
draw
方法的原因,与TextureRegion不同。Sprite中的这个备份数据数组使它有可能更快地绘制,因为它的一些数据只有在移动时才需要重新计算

ShaperEnder不提供任何直接传递网格顶点数据数组的方法。矩形类不是专门为渲染而设计的。如果您只是想寻找一种更简单的方法来编写绘图代码,那么可以将矩形子类化,以添加一种方便的方法,直接使用ShaperEnder来绘制矩形

public class MyRectangle extends Rectangle {

    //... constructors

    public void draw (ShapeRenderer shapeRenderer){
        shapeRenderer.rect(x, y, width, height);
    }
}

这与渲染精灵的方式完全相同。您必须在每次调用
render()
时渲染它们,因为屏幕每帧都会重新绘制,就像SpriteBatch一样。我知道,但在形状中,您不会渲染实际的矩形sr.rect(r.x,r.y,r.width,r.height)。在sprite中,可以像下面这样渲染实际的sprite:sprite.draw(批处理)。您只需获取矩形的属性,ShaperEnder就可以绘制形状。但不是实际的矩形形状。