我正在使用C#和Monogame 3.2。 我目前正在开发2D游戏,比如Starbound,我需要让这些块相互连接,如果没有,就会有一些奇特的边框。 我正在做的是我有一个覆盖整个32 * 32图像的纹理,以及一个名为" trimImage"的自定义函数。修剪图像,使其具有花哨的边框。 但是,我需要找到一种方法在Texture2D中的特定像素处设置透明像素,以便我可以制作该边框。
http://i.imgur.com/dvh6sI6.png 看到紫色的污垢,我贝斯特地希望它将图像修剪成类似的东西,当其他块连接到它时它会连接。
有谁知道如何,或至少更好的方式来做到这一点" border"影响?感谢。
注意:在我的修剪课程中,我真的有一些评论,没有别的。
答案 0 :(得分:0)
不确定你想要的边框是什么样的,但你可以使用Texture2D.GetData()函数进行这样的颜色替换:
private Color TRANSPARENT = Color.Transparent;
private Color BAD_COLOR = Color.Purple;
private const int DEVIATION = 10;
public Texture2D trimImage(Texture2D texture)
{
/// Get the data from the original texture and place it in an array
Color[] colorData = new Color[texture.Width * texture.Height];
texture.GetData<Color>(colorData);
/// Loop through the array and change the RGB values you choose
for (int x = 0; x < texture.Width; x++)
{
for (int y = 0; y < texture.Height; y++)
{
Color pixel = colorData[x * texture.Height + y];
/// Check if the color is within the range
if (MathHelper.Distance(pixel.R, BAD_COLOR.R) < DEVIATION &&
MathHelper.Distance(pixel.G, BAD_COLOR.G) < DEVIATION &&
MathHelper.Distance(pixel.B, BAD_COLOR.B) < DEVIATION &&
pixel.A != 0f)
{
/// Make that color transparent
pixel = TRANSPARENT;
}
}
}
/// Put the color array into the new texture and return it
texture.SetData<Color>(colorData);
return texture;
}
能够制作不同的边框只是改变循环参数和选择合适的像素。希望它有所帮助