我正在使用Texture2D.GetData()
方法创建Tilemap。这总是在我第一次执行时工作,但第二次该方法只返回其他颜色,混淆整个算法。我完全没有理由这样做。
我的代码:
switch (KartenID)
{
case 1: WasserKarte = Content.Load<Texture2D>("Karte/Karte1");
break;
case 2: WasserKarte = Content.Load<Texture2D>("Karte/Karte2");
break;
default:WasserKarte = Content.Load<Texture2D>("Karte/StandardKarte");
break;
}
KARTE_BREITE = WasserKarte.Width;
KARTE_HOEHE = WasserKarte.Height;
Color[] c = new Color[KARTE_BREITE* KARTE_HOEHE];
WasserKarte.GetData<Color>(c);
//and so on...
我现在真的很沮丧。我无法确定Content.Load<>
是否返回错误的纹理,但我不这么认为。这是我第二次运行此代码而不重新启动应用程序。
我真的很感激帮助。
答案 0 :(得分:0)
相同的纹理应始终返回相同的颜色数据。例如:
var texture = Content.Load<Texture2D>("img");
var clr = new Color[texture.Width*texture.Height];
texture.GetData(clr);
texture = Content.Load<Texture2D>("img");
var clr2 = new Color[texture.Width*texture.Height];
texture.GetData(clr2);
for (int i = 0; i < clr.Length; i++)
{
if (clr[i] != clr2[i])
{
// never gets hit
Console.WriteLine("Error - color {0} != color {1}", clr[i], clr2[i]);
}
}
由于你没有提供更多的代码,我只能假设,你在运行时做了一些不是故意对纹理的东西。但是,有一种简单的方法可以解决您的问题并同时优化代码。创建用于存储纹理信息的类,如下所示:
class Resource
{
public Texture2D Texture;
public Color[] ColorData;
}
Dictionary<string, Resource> Resources;
每次需要获取颜色信息时,不要调用Content.Load,而是读取关卡中使用的所有纹理,然后分配纹理标识符并仅为每个纹理获取一次颜色数据。稍后只需从资源中重用已加载的颜色数据:
var colorData = Resource["KartenID"].ColorData;
// do something with color data
当然这只是游戏资源管理的一个非常简单的例子,你可以编写更复杂的资源管理器来满足你的需求。