我正在使用 libgdx 制作一个小平台游戏,我想让敌人在玩家用武器伤害他们时以红色闪烁。
我已经尝试更改精灵颜色和精灵批次颜色但没有成功,它仅将新颜色与纹理之一融为一体。
sprite.setColor(Color.RED);
spriteBatch.draw(sprite);
我想要达到的效果是:
从精灵纹理到全红色,然后再返回。
我认为这与混合功能有关,但我对此不确定。我想避免为游戏中的每个怪物制作一些红色精灵。
有人知道如何达到这种效果吗?
您可以创建一个像这样的着色器来更改所有像素的颜色,而不是将它们乘以该颜色。通过调用此着色器与 SpriteBatch 一起使用spriteBatch.setShader(shader);
.
这基本上是默认的 SpriteBatch 着色器,只不过最终颜色替换了所有非 Alpha 像素。
要使用此方法,您必须将彩色精灵与普通精灵分开批处理。称呼spriteBatch.setShader(null);
返回绘制常规精灵。
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);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)