让Android应用程序运行Libgdx,其中包含许多精灵。目前我根据它们属于哪个组来对它们进行不同的着色,例如“红色”,“绿色”,“蓝色”等。但是,我认为我更喜欢只对精灵的一部分进行着色而不是整个部分。< / p>
目前我使用:
batch.begin();
batch.setColor(color1);
batch.draw(group1);
batch.setColor(color2);
batch.draw(group2);
etc..
batch.end();
batch.setColor(color)
用于为批处理着色并将其应用于整个精灵。完成该组后,我会更改颜色并移至下一组。完成组后,我重置批次颜色。
是否有着色器/搅拌器方式只对颜色的一部分进行着色?例如,我的纹理中任何颜色为红色的东西都应被视为“动态区域”,然后可以将其着色为我动态设置的任何颜色。
我无法使用透明度,因为纹理的边缘是透明的,需要保持这种方式进行混合。
非常感谢
答案 0 :(得分:0)
您可以使用TextureRegion
中的第二个Sprite
来实现此目的。因此,您可以为此附加区域使用其他颜色。这个其他区域应该只包含可以改变颜色和透明背景的图像的一部分。
public class MySprite extends Sprite {
TextureRegion region1, region2;
Color extraColor;
...
@Override
public void draw(Batch batch, float parentAlpha) {
Color color = getColor();
batch.setColor(color.r, color.g, color.b, color.a * parentAlpha);
batch.draw(region1, getX(), getY(), getOriginX(), getOriginY(),
getWidth(), getHeight(), getScaleX(), getScaleY(), getRotation());
batch.setColor(extraColor);
batch.draw(region2, getX(), getY(), getOriginX(), getOriginY(),
getWidth(), getHeight(), getScaleX(), getScaleY(), getRotation());
}
}