2

我正在尝试在 libgdx 中绘制一个具有透明背景的精灵,但是透明背景用白色填充,而不是显示在该位置已经渲染的内容。

不显示透明度

精灵(带帽子)为 64 x 64,边缘和右侧具有透明度。应该有两个带有“C!”的瓷砖 在他身后,但它只是充满了白色。

这是我用来渲染图像的代码。

public void draw(SpriteBatch sb, float parentAlpha){
    sb.enableBlending();
    sb.draw(texture, getX() + 32, getY());
}
4

4 回答 4

7

如果要启用混合,需要使用设置混合功能setBlendFunction。这准确定义了您希望混合的工作方式。大概,你想要经典的GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA混合。

于 2013-06-08T17:12:06.730 回答
3

所有的精灵都应该混合?也许在您绘制后禁用混合可以解决您的问题。

也许是这样的:

public void draw(SpriteBatch sb, float parentAlpha){
   sb.enableBlending();
   sb.draw(texture, getX() + 32, getY());
   sb.disableBlending();
}

如果这不起作用,您可以尝试使用以下方式激活 GL 选项中的混合:

    Gdx.gl.glEnable(GL10.GL_BLEND);
    Gdx.gl.glBlendFunc(GL10.GL_SRC_ALPHA, GL10.GL_ONE_MINUS_SRC_ALPHA);
            ...
            Your code Here
            ...
    Gdx.gl.glDisable(GL10.GL_BLEND);

希望能帮助到你 :)

于 2013-06-11T10:27:06.727 回答
2

我设法通过将我的应用程序更改为 OpenGL 2.0 而不是 1.0 来解决这个问题。仍然不确定问题是什么。

于 2013-06-08T19:42:57.403 回答
2

首先,确保您的 PNG 中包含透明度信息。

其次,确保您以正确的顺序绘制事物(您必须在精灵之前绘制背景框)。

于 2013-06-08T19:08:59.713 回答