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

Luk*_* Vo 6 java tint sprite libgdx spritebatch

我创建了一个AnimatedSprite类,绘制一个特定的TextureRegion.有时我需要一种色调效果,所以我设置(this.color是Color我的一个字段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);
Run Code Online (Sandbox Code Playgroud)

但是,当我将AnimatedSprite颜色设置为黑色或任何颜色时,其他所有颜色都会有颜色.我甚至尝试flush(),结束批次并开始新的等等......但似乎没有任何工作.

请帮我正确应用色调效果.我会很感激任何想法.

P.T*_*.T. 8

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

this.color = Color.WHITE;
Run Code Online (Sandbox Code Playgroud)

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

在构造Color要变异的对象时始终制作副本:

this.color = new Color(Color.WHITE);
Run Code Online (Sandbox Code Playgroud)

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