Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 纹理中的透明度在libgdx中不起作用_Java_Opengl_Libgdx - Fatal编程技术网

Java 纹理中的透明度在libgdx中不起作用

Java 纹理中的透明度在libgdx中不起作用,java,opengl,libgdx,Java,Opengl,Libgdx,我试图在libgdx中绘制一个具有透明背景的精灵,但透明背景用白色填充,而不是显示在该位置已渲染的内容 精灵(带帽子)是64乘64,边缘和右侧都是透明的。应该有两块带有“C”的瓷砖在他身后,只是一片白色 这是我用来渲染图像的代码 public void draw(SpriteBatch sb, float parentAlpha){ sb.enableBlending(); sb.draw(texture, getX() + 32, getY()); } 如果要启用混合,还需

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

精灵(带帽子)是64乘64,边缘和右侧都是透明的。应该有两块带有“C”的瓷砖在他身后,只是一片白色

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

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

如果要启用混合,还需要使用
setBlendFunction
。这精确地定义了混合的工作方式。想必,您想要经典的
GL11.GL\u SRC\u ALPHA,GL11.GL\u ONE\u减去
混合。首先,确保PNG中包含透明度信息


第二,确保您以正确的顺序绘制东西(您必须在精灵之前绘制背景框)。

我将应用程序更改为OpenGL 2.0而不是1.0,从而解决了这个问题。仍然不确定问题出在哪里。

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

也许是这样的:

public void draw(SpriteBatch sb, float parentAlpha){
   sb.enableBlending();
   sb.draw(texture, getX() + 32, getY());
   sb.disableBlending();
}
    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);
如果这不起作用,您可以尝试在GL选项中激活混合,如下所示:

public void draw(SpriteBatch sb, float parentAlpha){
   sb.enableBlending();
   sb.draw(texture, getX() + 32, getY());
   sb.disableBlending();
}
    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);

希望有帮助:)

运气不好。这段代码创建了完全相同的图像。public void draw(SpriteBatch sb,float parentAlpha){sb.enablembling();sb.setBlendFunction(GL11.GL_SRC_ALPHA,GL11.GL_ONE_减去SRC_ALPHA);sb.draw(texture,getX(),getY());}@ScottJordan:那么你的问题并不包含回答它所需的所有信息。要么你没有画出你想象中的图像,要么图像没有你想象中的透明度,要么图像有透明度但你加载不正确,要么libgdx有一个bug。解决方法是:确保你以正确的顺序画东西(你必须在精灵之前画背景框)。