设置SpriteBatch颜色(用于着色)会影响所有图形



我创建了一个AnimatedSprite类,它绘制了一个特定的TextureRegion。有时我需要一个色调效果,所以我设置(this.color是我的AnimatedSpriteColor字段):

super.draw(batch, parentAlpha);
batch.setColor(this.color);
batch.draw(this.frames[this.currentFrame], x, y, originX, originY, width, height, scaleX, scaleY, rotation)
batch.setColor(Color.WHITE);

然而,当我将AnimatedSprite的颜色设置为黑色或任何颜色时,其他所有颜色都具有该色调。我甚至尝试flush(),结束一批,开始新的一批,等等……但似乎什么都不起作用。

请帮我正确使用色调效果。任何想法我都会感激的。

小心共享的可变Color对象!如果你这样做:

this.color = Color.WHITE;

然后变异this.color,你就会变异Color.WHITE,这通常是错误的!:)

在构建将发生变异的Color对象时,始终进行复制:

this.color = new Color(Color.WHITE);

libGDX中的许多对象都是这样可变的(而常规Java库中的类似对象是不可变的),因为libGDX(理所当然地)非常关心GC开销。

而不是使用

this.color = new Color(Color.WHITE);

你可以使用:

batch.setColor(Color.WHITE.tmp());

这将创建一个白色的临时副本,对我来说似乎稍微干净一些。

最新更新