java - libgdx cambiando el color de los sprites mientras está herido
colors game-engine (1)
Puede crear un sombreado como este para cambiar el color de todos los píxeles en lugar de multiplicarlos por ese color. Utilice este sombreador con SpriteBatch llamando a spriteBatch.setShader(shader);
.
Este es básicamente el sombreador SpriteBatch predeterminado, excepto que el color final reemplaza todos los píxeles no alfa.
Para usar este método, debes agrupar tus sprites de colores por separado de tus sprites normales. Llamar a spriteBatch.setShader(null);
para volver a dibujar sprites regulares.
String vertexShader = "attribute vec4 " + ShaderProgram.POSITION_ATTRIBUTE + ";/n" //
+ "attribute vec4 " + ShaderProgram.COLOR_ATTRIBUTE + ";/n" //
+ "attribute vec2 " + ShaderProgram.TEXCOORD_ATTRIBUTE + "0;/n" //
+ "uniform mat4 u_projTrans;/n" //
+ "varying vec4 v_color;/n" //
+ "varying vec2 v_texCoords;/n" //
+ "/n" //
+ "void main()/n" //
+ "{/n" //
+ " v_color = " + ShaderProgram.COLOR_ATTRIBUTE + ";/n" //
+ " v_texCoords = " + ShaderProgram.TEXCOORD_ATTRIBUTE + "0;/n" //
+ " gl_Position = u_projTrans * " + ShaderProgram.POSITION_ATTRIBUTE + ";/n" //
+ "}/n";
String fragmentShader = "#ifdef GL_ES/n" //
+ "#define LOWP lowp/n" //
+ "precision mediump float;/n" //
+ "#else/n" //
+ "#define LOWP /n" //
+ "#endif/n" //
+ "varying LOWP vec4 v_color;/n" //
+ "varying vec2 v_texCoords;/n" //
+ "uniform sampler2D u_texture;/n" //
+ "void main()/n"//
+ "{/n" //
+ " gl_FragColor = v_color * texture2D(u_texture, v_texCoords).a;/n" //
+ "}";
ShaderProgram shader = new ShaderProgram(vertexShader, fragmentShader);
Estoy usando libgdx para hacer un pequeño juego de plataformas y me gustaría hacer que los enemigos parpadeen en rojo mientras el jugador los lastima con su arma.
Ya traté de cambiar el color de los sprites y el color del lote de sprites sin éxito, solo se derrite el nuevo color con el de la textura.
sprite.setColor(Color.RED);
spriteBatch.draw(sprite);
el efecto que quiero lograr es:
pasando de la textura de sprite a rojo completo y luego de vuelta otra vez. Creo que hay algo que ver con la función de fusión, pero no estoy seguro de eso. Quiero evitar hacer un sprite rojo para cada monstruo de mi juego. ¿Alguien sabe cómo lograr este efecto?