现在我在我的精灵类中使用了一个名为 SetTextureColour 的函数:
public void SetTextureColour(Color Colour)
{
Color[] data = new Color[Texture.Width * Texture.Height];
Texture.GetData(data);
for (int i = 0; i < data.Length; i++)
{
if (data[i] == Color.White)
{
data[i] = Colour;
}
}
Texture.SetData(data);
}
要将精灵纹理中每个白色像素的颜色更改为指定颜色,这可以正常工作,但我遇到的问题是它会更改共享该纹理的每个精灵的颜色,而不仅仅是单个精灵的颜色。有没有人有一个解决方案,这样我就可以只改变那个精灵纹理的像素,所以我可以使用为具有相同纹理的多个精灵指定不同颜色的函数。
提前致谢。
编辑:
根据建议,我尝试使用像素着色器来执行此操作,尽管在尝试这样做之前我从未使用过它们,但到目前为止,我已经按照建议进行了操作-
sampler TextureSampler : register(s0);
float3 key_color;
float3 new_color;
float4 ChangePixel(float4 color : COLOR0, float2 texCoord : TEXCOORD0) : COLOR0
{
float4 newColor = tex2D(TextureSampler, texCoord);
if (distance(key_color, color.rgb)<0.001f)
{
color.rgb = new_color;
}
return newColor;
}
technique PixelChange
{
pass Pass0
{
PixelShader = compile ps_2_0 ChangePixel();
}
}
它是使用加载内容加载的,我还使用它设置了它的技术-
Effect1.CurrentTechnique = Effect1.Techniques["PixelChange"];
然后我使用这两行设置值-
Effect1.Parameters["key_color"].SetValue(Color.White.ToVector3());
Effect1.Parameters["new_color"].SetValue(Color.Red.ToVector3());
但这似乎无济于事,有人可以帮助我吗?正如我所说,这是第一次使用着色器,所以我可以使用一些帮助。
最后一件事,在 spriteBatch.Begin 中使用了效果,所以这不是没有应用效果的问题。