Java 纹理中的透明度在libgdx中不起作用
我试图在libgdx中绘制一个具有透明背景的精灵,但透明背景用白色填充,而不是显示在该位置已渲染的内容 精灵(带帽子)是64乘64,边缘和右侧都是透明的。应该有两块带有“C”的瓷砖在他身后,只是一片白色 这是我用来渲染图像的代码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()); } 如果要启用混合,还需
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。解决方法是:确保你以正确的顺序画东西(你必须在精灵之前画背景框)。