我创建了一个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
,结束批次并开始新的等等......但似乎没有任何效果。
请帮我正确应用色调效果。我会很感激。
答案 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());
这将创建一个白色的临时副本,对我来说似乎更清晰。