我创建了一个AnimatedSprite
类,它绘制了一个特定的TextureRegion
。有时我需要一个色调效果,所以我设置(this.color是我的AnimatedSprite
的Color
字段):
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());
这将创建一个白色的临时副本,对我来说似乎稍微干净一些。