I created a AnimatedSprite
class, that draw a specific TextureRegion
. Sometimes I need a tint color effect, so I set (this.color is a Color
field of my 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);
However, when I have an AnimatedSprite
's color set to black or any color, everything else has that color tint. I even try to flush()
, end the batch and begin a new one, etc... but nothing seems to work.
Please help me apply the tint effect correctly. I will appreciate any idea.
Beware shared mutable Color
objects! If you do:
this.color = Color.WHITE;
And then mutate this.color
later, you will be mutating Color.WHITE
which is generally the wrong thing! :)
Always make a copy when constructing a Color
object that you will mutate:
this.color = new Color(Color.WHITE);
Many objects in libGDX are mutable like this (whereas similar objects in a regular Java library would be immutable) because libGDX is (rightfully) very concerned about GC overhead.
Rather than use
this.color = new Color(Color.WHITE);
you could use:
batch.setColor(Color.WHITE.tmp());
This will create a temporary copy of the white color and seems slightly cleaner to me.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With