【问题标题】:Transparency in texture not working in libgdx纹理的透明度在 libgdx 中不起作用
【发布时间】:2013-06-08 16:52:06
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: java opengl libgdx


    【解决方案1】:

    如果您要启用混合,需要set the blend functionsetBlendFunction。这准确定义了您希望混合的工作方式。大概,你想要经典的GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA 混合。

    【讨论】:

    • 不走运。此代码创建完全相同的图像。 public void draw(SpriteBatch sb, float parentAlpha){ sb.enableBlending(); sb.setBlendFunction(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); sb.draw(纹理,getX(),getY()); }
    • @ScottJordan:那么您的问题并不包含回答它所需的所有信息。要么你没有绘制你认为的图像,图像没有你认为的透明度,图像有透明度但你加载不正确,或者 libgdx 有一个错误。
    【解决方案2】:

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

    也许是这样的:

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

    希望对你有帮助:)

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

      • 这解决了它:确保你以正确的顺序绘制东西(你必须在精灵之前绘制背景框)。
      【解决方案4】:

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

      【讨论】:

        猜你喜欢
        • 2013-10-07
        • 1970-01-01
        • 2015-12-02
        • 2013-11-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多