2010-05-08 27 views
7

Tôi muốn chia lưới trò chơi của mình thành một mảng hình chữ nhật. Mỗi hình chữ nhật là 40x40 và có 14 hình chữ nhật trong mỗi cột, với tổng số 25 cột. Điều này bao gồm một khu vực trò chơi của 560x1000.Hiển thị hình chữ nhật trong cửa sổ trò chơi với XNA

Đây là mã tôi đã thiết lập để làm cho cột đầu tiên của hình chữ nhật trên lưới trò chơi:

Rectangle[] gameTiles = new Rectangle[15]; 

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

Tôi khá chắc chắn rằng công trình này, nhưng tất nhiên tôi không thể xác nhận điều đó vì hình chữ nhật không hiển thị trên màn hình để tôi có thể nhìn thấy chúng. Những gì tôi muốn làm cho mục đích gỡ lỗi là tạo ra một đường viền, hoặc tô màu hình chữ nhật với màu sắc để tôi có thể nhìn thấy nó trên chính trò chơi, chỉ để đảm bảo nó hoạt động.

Có cách nào để thực hiện điều này không? Hoặc bất kỳ cách nào tương đối đơn giản tôi chỉ có thể chắc chắn rằng điều này hoạt động?

Cảm ơn bạn rất nhiều.

Trả lời

23

Trước tiên, hãy một kết cấu 1x1 pixel màu trắng cho hình chữ nhật:

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

Bây giờ, bạn cần phải làm cho hình chữ nhật - giả định Rectangle được gọi rectangle. Đối với một rendering một khối đầy, nó rất đơn giản - hãy chắc chắn để thiết lập các tint Color là màu mà bạn muốn. Chỉ cần sử dụng mã này:

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

Đối với đường viền thì phức tạp hơn. Bạn phải vẽ 4 dòng tạo nên đường viền (hình chữ nhật ở đây là 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 

Hy vọng điều đó sẽ hữu ích!

+1

+1 Great câu trả lời. Chính xác là những gì tôi đang tìm kiếm! Cảm ơn –

+0

+1 ngắn gọn và chính xác những gì tôi cần. – FRoZeN

0

Điều này làm việc hoàn hảo nếu bạn muốn vẽ hình chữ nhật trên kết cấu hiện có của mình. Tuyệt vời khi bạn muốn kiểm tra/xem cho va chạm

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

----- Từ trang web -----

Bí quyết cơ bản để hình vẽ có ý nghĩa để thực hiện một single-pixel kết cấu màu trắng, sau đó bạn có thể trộn với các màu khác và hiển thị ở dạng rắn.

// 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 

Sau đó, trong phương pháp() Draw bạn làm điều gì đó như:

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(); 

Và phương pháp thực tế mà không được vẽ:

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); 
} 
Các vấn đề liên quan