2014-09-28 46 views
0

我正在使用C#和Monogame 3.2。 我目前正在開發一個2D遊戲,比如Starbound,我需要讓這些塊互相連接,如果沒有連接,就有一些奇特的邊框。 我正在做的是我有一個覆蓋整個32 * 32圖像的紋理,以及一個名爲「trimImage」的自定義函數來修剪圖像,使其具有花哨的邊框。 但是,我需要找到一種方法來在Texture2D中的特定像素上設置透明像素,以便我可以製作該邊框。如何替換Monogame上的Texture2D上的RGB值?

http://i.imgur.com/dvh6sI6.png 看到紫色的污垢,我非常想讓它將圖像修剪成類似的東西,當其他塊連接到它時,它會連接。

有沒有人知道如何,或至少有更好的方式來做到這一點「邊界」效應?謝謝。

注意:在我修剪的課程中,我確實只有一些評論,沒有別的。

+0

不確定這是你正在嘗試做什麼,但它可能對你有幫助:http://www.jgallant.com/auto-calculating-bounding-box-from-texture-在-monogame-XNA / – jgallant 2014-10-16 14:53:10

回答

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; 
} 

如果能夠做出不同的邊境僅改變環路參數並選擇合適的像素。希望它有幫助