2012-04-02 83 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); 
    } 
} 

我這是怎麼拉我的網