【问题标题】:How to render multiple Shapes in Libgdx?如何在 Libgdx 中渲染多个形状?
【发布时间】:2016-12-21 17:06:50
【问题描述】:

我使用 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 使用矩形的属性绘制形状.有没有一种类似于渲染精灵的方法?

【问题讨论】:

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

标签: java libgdx shape-rendering


【解决方案1】:

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

ShapeRenderer 不提供任何直接传递 Mesh 顶点数据数组的方法。而且 Rectangle 类并不是专门为渲染而设计的。如果您只是在寻找一种更简单的方法来编写绘图代码,您可以将 Rectangle 子类化以添加一种方便的方法,以便直接使用 ShapeRenderer 进行绘图。

public class MyRectangle extends Rectangle {

    //... constructors

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-02-23
    • 1970-01-01
    • 1970-01-01
    • 2022-10-06
    • 2016-06-22
    • 2011-10-01
    • 1970-01-01
    相关资源
    最近更新 更多