que - imprimir en colores en java
Establecer el color de SpriteBatch(para teƱir) afecta a todos los dibujos (2)
¡Cuidado con los objetos de Color
mutables compartidos! Si lo haces:
this.color = Color.WHITE;
Y luego mute este this.color
Luego, this.color
, lo que generalmente es lo incorrecto. :)
Siempre haga una copia al construir un objeto Color
que mutará:
this.color = new Color(Color.WHITE);
Muchos objetos en libGDX son mutables de esta manera (mientras que los objetos similares en una biblioteca regular de Java serían inmutables) porque libGDX está (con razón) muy preocupado por la sobrecarga de GC.
Creé una clase AnimatedSprite
, que dibuja una TextureRegion
específica. A veces necesito un efecto de color de tinte, por lo que configuro (this.color es un campo Color
de mi 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);
Sin embargo, cuando tengo el color de un AnimatedSprite
en negro o en cualquier color, todo lo demás tiene ese tinte de color. Incluso intento flush()
, terminar el lote y comenzar uno nuevo, etc. pero nada parece funcionar.
Por favor, ayúdame a aplicar el efecto de tinte correctamente. Apreciaré cualquier idea.
En lugar de usar
this.color = new Color(Color.WHITE);
podrías usar:
batch.setColor(Color.WHITE.tmp());
Esto creará una copia temporal del color blanco y me parece un poco más limpio.