libgdx中关于Sprite透明度无效的一深坑

在libgdx初学者群里经常会见到有人问,为什么我设置了Sprite透明度没有效果?曾经我也落入此坑中久久未能爬出来.在此备忘一下.

下面是一段绘制已设置好Sprite透明度的代码.

batch.begin();
batch.setColor(sprite.getColor().r,sprite.getColor().g,sprite.getColor().b,sprite.getColor().a);
batch.draw(nextSprite.getTexture(), 0, 0, Gdx.graphics.getWidth(), Gdx.graphics.getHeight(), 0, 0, Gdx.graphics.getWidth(), Gdx.graphics.getHeight(), false, true);
batch.end();
我们可以看到第2行代码为SpriteBatch设置了sprite的颜色和透明度.第三句就是绘制该sprite的纹理.

好多朋友这么设置后发现设置好的透明度无效,或者是不按照自己事先设置好的方式去显示.

我看过好几位问我这样问题的朋友的代码,发现他们无一例外的都是忘记在绘制之前做清屏设置了.

假设我们的sprite的透明度设置为0.5f,正常情况下sprite绘制出来是一个半透明效果,如果我们没有在batch.begin()之前做清屏处理,那第一次绘制上去了一个透明度0.5f的纹理,然后在第二帧的时候又绘制上去一个透明度0.5f的纹理,两个一叠加显示的肯定就不是透明度为0.5f的纹理了.

所以大家要切记在做透明度操作时一定要在begin之前加上Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT);

清屏处理,把上一帧已经绘制的半透明纹理清理掉,才会显示出你要的效果.


你可能感兴趣的:(java,libgdx)