У меня есть Texture2D
, который я загружаю из конвейера содержимого.Это работает нормально, но как только я пытаюсь использовать SetData
на совершенно другом Texture2D
, все текстуры в моей игре становятся полностью черными:
Это мой класс HUDMeter, класс, которым я хочу быть просто красным
Texture2D colorGrad = Content.Load<Texture2D>(GradientAsset);
Color[,] pixels = new Color[colorGrad.Width, colorGrad.Height];
Color[] pixels1D = new Color[colorGrad.Width * colorGrad.Height];
pixels = GetRedChannel(colorGrad);
pixels1D = Color2DToColor1D(pixels, colorGrad.Width);
System.Diagnostics.Debug.WriteLine(pixels[32,32]);
Gradient = colorGrad;
Gradient.SetData<Color>(pixels1D);
Они используют учебник Riemers
protected Color[,] GetRedChannel(Texture2D texture)
{
Color[,] pixels = TextureTo2DArray(texture);
Color[,] output = new Color[texture.Width, texture.Height];
for (int x = 0; x < texture.Width; x++)
{
for (int y = 0; y < texture.Height; y++)
{
output[x,y] = new Color(pixels[x,y].G, 0, 0);
}
}
return output;
}
protected Color[,] TextureTo2DArray(Texture2D texture)
{
Color[] colors1D = new Color[texture.Width * texture.Height];
texture.GetData(colors1D);
Color[,] colors2D = new Color[texture.Width, texture.Height];
for (int x = 0; x < texture.Width; x++)
for (int y = 0; y < texture.Height; y++)
colors2D[x, y] = colors1D[x + y * texture.Width];
return colors2D;
}
private Color[] Color2DToColor1D (Color[,] colors, int width)
{
Color[] output = new Color[colors.Length];
for (int x = 0; x < width; x++)
{
for (int y = 0; y < colors.Length / width; y++)
{
output[x + y * width] = colors[x % width, y % (colors.Length/width)];
}
}
return output;
}
И воткод для рисования спрайтов, это отлично работает, и я всегда рисую спрайты:
batch.Draw(meter.Gradient, new Vector2(X, Y), Color.White);
Обновление:
Я обнаружил, что спрайты не используют один и тот же файлне черныеФактически ли Texture2D.SetData <> () изменяет сам файл?какая польза от этого?
Обновление:
Я только что попытался использовать Альфу, а также RGB, и он работает.Я думаю, что с одним из методов преобразования что-то не так.