首页 > 解决方案 > 如何在循环中为形状着色?

问题描述

为什么循环中的两个人物都只涂上一种颜色?而我需要一个涂成黑色,一个涂成蓝色。谢谢!

public void draw(Batch batch, float parentAlpha)
{
    super.draw(batch, parentAlpha);

    renderer.setProjectionMatrix(Main.viewport.getCamera().combined);
    renderer.setTransformMatrix(batch.getTransformMatrix());
    renderer.begin(ShapeRenderer.ShapeType.Line);

    for (int i = 0; i < rect2.size(); i++)
    {
        renderer.setColor(Color.BLACK);
        renderer.rect(rect2.get(i).getX(), rect2.get(i).getY(),
                rect2.get(i).getWidth(), rect2.get(i).getHeight());
    }
    for (int i = 0; i < enemy.size(); i++)
    {
        renderer.setColor(Color.BLUE);
        renderer.rect(enemy.get(i).getX(), enemy.get(i).getY(),
                enemy.get(i).getWidth(), enemy.get(i).getHeight());
    }
    renderer.end();
}

标签: javalibgdx

解决方案


如果您查看 LibGDX 文档,您可以找到一个关于renderer(如您所命名的)以及如何用不同颜色为多个形状着色的页面。通过使用renderer.begin()你设置一个形状。然后,您给出该形状的所有属性(包括尺寸和颜色等)。一旦你使用renderer.end()形状就会被绘制出来。然后,当您再次使用renderer.begin()时,您定义了具有新属性的新形状,您可以在其中再次选择不同的尺寸和颜色。

来自 LibGDX 文档的示例代码: https ://libgdx.badlogicgames.com/ci/nightlies/docs/api/com/badlogic/gdx/graphics/glutils/ShapeRenderer.html

 shapeRenderer.begin(ShapeType.Line);
 shapeRenderer.setColor(1, 1, 0, 1);
 shapeRenderer.line(x, y, x2, y2);
 shapeRenderer.rect(x, y, width, height);
 shapeRenderer.circle(x, y, radius);
 shapeRenderer.end();

 shapeRenderer.begin(ShapeType.Filled);
 shapeRenderer.setColor(0, 1, 0, 1);
 shapeRenderer.rect(x, y, width, height);
 shapeRenderer.circle(x, y, radius);
 shapeRenderer.end();

tl; dr:结束shapeRenderer每个循环之后,并为另一个循环开始一个新的循环。


推荐阅读