2012-04-02 85 views
0

嘿家伙,我认为这将是一个1秒的事情要做,目前我有一个2D游戏的瓷砖,并根据它称为这些瓷砖集的地形。并且瓦片集是颜色编码的粉红色是材料而蓝色是与瓦片相邻的材料。XNA改变200左右瓷砖像素

到目前为止,当地形发生变化或加载时,我会在屏幕上绘制瓦片,并在移动时绘制任何新的瓦片。这一切都很好,工作得很好,但是当我有50个草地砖需要从粉红色变为绿色和75个需要从粉红色变成灰色的灰色砖时,我有一个问题。

它只出现第一个瓷砖被改变,然后每个其他瓷砖前面或之前,瓷砖是第一种颜色相同的颜色。

我给你一个例子,代码什么IM做

Color[] storePixels = new Color[50 * 50]; 

for(int y = 0; y < 100; y ++) 
{ 
    for(int x = 0; x < 100; x++) 
    { 
     tileTexture[y,x].GetData(storePixels); 

     for(int i = 0; i < storePixels.Length; i ++) 
     { 
       if(tileMaterial[y,x] == "DIRT") 
       { 
        storePixels[i] = new Color(100,100,100); 
       } 
       if(tileMaterial[y,x] == "GRASS") 
       { 
        storePixels[i] = new Color(0,255,0); 
       } 
     } 
     tileTexture[y,x].SetData(storePixels); 
    } 
} 

给我,我不能明白为什么这不会工作。我假设也许我需要重置storePixels,我已经尝试过,但如果它的草或灰色,如果它的污垢仍然不创建绿色。

请让我知道如果你知道这是为什么不工作感谢您的时间,谢谢你提前:)

OK!我理解了它的IM调用相同的图像在我的内容文件夹

for(int y = 0; y < 100; y ++) 
{ 
    for(int x = 0; x < 100; x ++) 
    { 
     tileTexture[y,x] = Content.Load<Texture2D>("tile"); 
    } 
} 

所以现在我们正在somewere我们知道为什么我走过的SetData(改的Texture2D问题被cuassed),它实际上直接改变这种瓷砖的Texture2D其他所有调用它的东西都会改变。

我不能在循环中调用它,我只在启动时调用它,我可以尝试存储texture2D的副本,然后更改它。

我不知道有没有人有任何进一步的解决方案来帮助解决这个问题?感谢您的时间:)

回答

0

该代码是一个坏主意...

你可以只用一个白色的质感工作...

WhiteTex = new Texture2D(GraphicsDevice,1,1); 
WhiteTex.SetData<Color>(new Color[] {Color.White }; 

你可以画砖这样...

Enum MaterialTypes { Dirt, Grass } 
static readonly Dictionary<int, Color> MaterialTypeToColor = new Dictionary() { {0, new Color(100,100,100)}, {1, new Color(0,255,0) }}; 

for(int y = 0; y < 100; y ++) 
{ 
    for(int x = 0; x < 100; x++) 
    {    
     batch.Draw(whiteTex, new Rectangle(x*50,y*50, 50,50), null, (MaterialTypeToColor[ (int) tileMaterial[y,x]]); 
    } 
} 
+0

绘图代码绘制每个texture2D在y,x数组中例如for(int y = 0; y <100; (int x = 0; x <100; x ++){spriteBatch.Draw(tileTexture [y,x],rectangle,Color.White); – user1109013 2012-04-03 03:37:54

+0

我尝试使用特定的storePixel颜色为每个texture2D,输出我接收例如我告诉它只绘制和更改瓷砖0,0,但它随机更改4,4 5,9 8,1 1,1和70%每次随机的其他瓷砖。我花了整整一天24试图修复这个没有成功,即时通讯思维即时通讯或者失去了一些东西或XNA不能绘制大量的瓷砖网格 – user1109013 2012-04-03 03:45:14

0
for(int y = 0; y < 100; y++) 
{ 
    for(int x = 0; x < 100; x++) 
    { 
     spriteBatch.Draw(tileTexture[y,x],rectangle,Color.White); 
    } 
} 

我这是怎么拉我的网