4

我正在尝试在课堂上的屏幕上绘制一个简单的矩形并将其用作演员。

但无论我做什么,似乎都没有办法把它画成透明的。有谁知道如何做到这一点?提前致谢!

public class AreaColorRect extends Actor {

    public float opacity = 0.0f;
    private Color shapeFillColor = new Color();
    public Rectangle area;
    public ShapeRenderer shapeRen;

    public AreaColorRect(float x, float y, float w, float h) {
        shapeRen = new ShapeRenderer();
        this.area = new Rectangle(x, y, w, h);
    }


    @Override
    public void draw(SpriteBatch batch, float parentAlpha) {
        shapeRen.begin(ShapeType.Filled);
        shapeRen.setColor(new Color(shapeFillColor.r, shapeFillColor.g, shapeFillColor.b,
            0.0f));
        shapeRen.rect(area.x, area.y, area.width, area.height);
        shapeRen.end();
    }

    public void setShapeFillColor(float r, float g, float b) {
        this.shapeFillColor = new Color(r, g, b, 1);
    }

}
4

3 回答 3

5

您正在混合上下文。SpriteBatch在开始之前结束你的ShapeRenderer。请参阅Group.draw 中的 libgdx-ShapeRenderer 以错误的颜色呈现。不过,这可能不是问题。

您还需要打开混合。您可以只在全局范围内执行一次,或根据需要启用它(并禁用它)。它应该由SpriteBatch上下文启用,但我不认为它为ShapeRenderer.

Gdx.graphics.getGL10().glEnable(GL10.GL_BLEND); // Or GL20

渲染背景和 Actor 的顺序也会影响透明度。

最后,您将不透明度设置为 0,因此对象将完全不可见。这通常根本不会做任何事情。(我假设您只是想从当前的 100% 可见中得到改变?)

于 2013-05-07T19:20:29.770 回答
2

我刚决定在我的游戏中使用 Scene2d 并遇到了同样的问题:如何使用矩形作为演员并将其绘制在屏幕上?

然后我在libgdx wiki上找到了这段文档 (默认情况下,Scene2d 有一个 SpriteBatch 来处理演员的绘制)

如果演员需要以不同的方式执行绘图,例如使用 ShapeRenderer,则应结束批处理,然后在方法结束时再次开始。当然,这会导致批次被刷新,因此应谨慎使用。可以使用 Batch 中的变换和投影矩阵:

private ShapeRenderer renderer = new ShapeRenderer();

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

    renderer.setProjectionMatrix(batch.getProjectionMatrix());
    renderer.setTransformMatrix(batch.getTransformMatrix());
    renderer.translate(getX(), getY(), 0);

    renderer.begin(ShapeType.Filled);
    renderer.setColor(Color.BLUE);
    renderer.rect(0, 0, getWidth(), getHeight());
    renderer.end();

    batch.begin();
}
于 2014-11-19T12:27:49.947 回答
2

很抱歉挖了这个。不过,既然你在标记 Android,我想我会简单介绍一下我的经验。我最近在一个问题上花了将近 4 个小时,其中 alpha 混合不起作用,因为它不适合你。

原来 libgdx'AndroidApplicationConfiguration默认使用 0 位作为 alpha 通道。如果您也是这种情况,那么在您的应用程序之前将其更改为更明智的东西可能是值得initialize()的。

于 2014-01-17T16:02:42.453 回答