2010-05-08 57 views
7

我想將我的遊戲網格劃分爲矩形數組。每個矩形都是40x40,每列有14個矩形,共25列。這涵蓋了560x1000的遊戲區域。使用XNA在遊戲窗口中顯示矩形

這是我已經設置了使矩形的第一列上的遊戲網格代碼:

Rectangle[] gameTiles = new Rectangle[15]; 

for (int i = 0; i <= 15; i++) 
{ 
    gameTiles[i] = new Rectangle(0, i * 40, 40, 40); 
} 

我敢肯定這個工作,當然我無法證實,因爲矩形不呈現在屏幕上讓我身體看到它們。我想爲調試目的而做的是渲染邊框,或者用顏色填充矩形,以便我可以在遊戲本身上看到它,以確保其正常工作。

有沒有辦法做到這一點?或者任何相對簡單的方法,我可以確保它的工作?

非常感謝。

回答

23

首先,白色1x1像素紋理矩形:

var t = new Texture2D(GraphicsDevice, 1, 1); 
t.SetData(new[] { Color.White }); 

現在,你需要渲染矩形 - 假設矩形稱爲rectangle。對於填充塊的渲染,它非常簡單 - 確保將色調Color設置爲所需的顏色。只需使用此代碼:

spriteBatch.Draw(t, rectangle, Color.Black); 

對於邊框,是否更復雜。你要畫4條線組成的輪廓(這裏的矩形r):

int bw = 2; // Border width 

spriteBatch.Draw(t, new Rectangle(r.Left, r.Top, bw, r.Height), Color.Black); // Left 
spriteBatch.Draw(t, new Rectangle(r.Right, r.Top, bw, r.Height), Color.Black); // Right 
spriteBatch.Draw(t, new Rectangle(r.Left, r.Top, r.Width , bw), Color.Black); // Top 
spriteBatch.Draw(t, new Rectangle(r.Left, r.Bottom, r.Width, bw), Color.Black); // Bottom 

希望它能幫助!

+1

+1偉大的答案。正是我正在尋找的!謝謝 – 2010-08-12 00:47:39

+0

+1短而正是我所需要的。 – FRoZeN 2011-08-02 15:30:45

0

如果你想在你現有的紋理上繪製矩形,這就完美了。偉大的,當你想測試/查看碰撞

http://bluelinegamestudios.com/blog/posts/drawing-a-hollow-rectangle-border-in-xna-4-0/

-----從網站-----

的基本技巧,繪製形狀是使單個像素紋理是白色,然後您可以與其他顏色混合並以堅固的形狀進行顯示。

// At the top of your class: 
Texture2D pixel; 

// Somewhere in your LoadContent() method: 
pixel = new Texture2D(GameBase.GraphicsDevice, 1, 1, false, SurfaceFormat.Color); 
pixel.SetData(new[] { Color.White }); // so that we can draw whatever color we want on top of it 
在draw()方法

然後做這樣的事情:

spriteBatch.Begin(); 

// Create any rectangle you want. Here we'll use the TitleSafeArea for fun. 
Rectangle titleSafeRectangle = GraphicsDevice.Viewport.TitleSafeArea; 

// Call our method (also defined in this blog-post) 
DrawBorder(titleSafeRectangle, 5, Color.Red); 

spriteBatch.End(); 

這確實繪圖的實際方法:

private void DrawBorder(Rectangle rectangleToDraw, int thicknessOfBorder, Color borderColor) 
{ 
    // Draw top line 
    spriteBatch.Draw(pixel, new Rectangle(rectangleToDraw.X, rectangleToDraw.Y, rectangleToDraw.Width, thicknessOfBorder), borderColor); 

    // Draw left line 
    spriteBatch.Draw(pixel, new Rectangle(rectangleToDraw.X, rectangleToDraw.Y, thicknessOfBorder, rectangleToDraw.Height), borderColor); 

    // Draw right line 
    spriteBatch.Draw(pixel, new Rectangle((rectangleToDraw.X + rectangleToDraw.Width - thicknessOfBorder), 
            rectangleToDraw.Y, 
            thicknessOfBorder, 
            rectangleToDraw.Height), borderColor); 
    // Draw bottom line 
    spriteBatch.Draw(pixel, new Rectangle(rectangleToDraw.X, 
            rectangleToDraw.Y + rectangleToDraw.Height - thicknessOfBorder, 
            rectangleToDraw.Width, 
            thicknessOfBorder), borderColor); 
}