2010-05-08 13 views
7

Chcę podzielić moją siatkę gry na tablicę prostokątów. Każdy prostokąt ma wymiary 40 x 40, aw każdej kolumnie jest 14 prostokątów, w sumie 25 kolumn. Obejmuje obszar gry o wymiarach 560x1000.Wyświetlanie prostokątów w oknie gry z XNA

Jest to kod mam skonfigurować, aby pierwszą kolumnę prostokątów na siatce gra:

Rectangle[] gameTiles = new Rectangle[15]; 

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

Jestem całkiem pewien, że to działa, ale oczywiście nie mogę potwierdzić, bo prostokąty nie renderuj na ekranie, aby móc je fizycznie zobaczyć. To, co chciałbym zrobić dla celów debugowania, to renderowanie obramowania lub wypełnianie prostokąta kolorem, aby można było zobaczyć go w samej grze, aby upewnić się, że to działa.

Czy jest na to sposób? Lub w jakikolwiek prosty sposób mogę po prostu upewnić się, że to działa?

Dziękuję bardzo.

Odpowiedz

23

Po pierwsze, upewnij teksturę piksel 1x1 bieli dla prostokąta:

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

Teraz trzeba uczynić prostokąt - Zakładamy, że prostokąt jest nazywany rectangle. Renderowanie wypełnionego bloku jest bardzo proste - upewnij się, że odcień Color jest odpowiednim kolorem. Po prostu użyj tego kodu:

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

Czy dla granicy jest bardziej skomplikowany? Trzeba wyciągnąć 4 linie, które tworzą kontury (prostokąt o to 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 

Nadzieję, że to pomaga!

+1

+1 Świetna odpowiedź. Było dokładnie to, czego szukałem! Dzięki –

+0

+1 krótki i dokładnie to, co potrzebne. – FRoZeN

0

To działało idealnie, jeśli chcesz narysować prostokąty na istniejących teksturach. Wielki, kiedy chcesz przetestować/patrz kolizje

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

----- ze strony -----

Podstawowy trik do rysowania kształtów jest stworzenie jednego piksela teksturę, która jest biała, którą można następnie łączyć z innymi kolorami i wyświetlać w pełnych kształtach.

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

Następnie w swojej metody Draw() zrobić coś takiego:

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

i rzeczywisty sposób, że robi to rysunek:

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