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

时间:2013-02-15 07:51:44

标签: java sprite libgdx tint spritebatch

我创建了一个AnimatedSprite类,用于绘制特定的TextureRegion。有时我需要一种色调效果,所以我设置(this.color是我Color的{​​{1}}字段:

AnimatedSprite

然而,当我将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,结束批次并开始新的等等......但似乎没有任何效果。

请帮我正确应用色调效果。我会很感激。

2 个答案:

答案 0 :(得分:7)

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

this.color = Color.WHITE;

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

在构建您将要改变的Color对象时始终制作副本:

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

libGDX中的许多对象都是可变的(而常规Java库中的类似对象是不可变的),因为libGDX(正确地)非常关注GC开销。

答案 1 :(得分:1)

而不是使用

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

你可以使用:

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

这将创建一个白色的临时副本,对我来说似乎更清晰。