2010-05-08 11 views
7

Voglio dividere la mia griglia di gioco in una serie di rettangoli. Ogni rettangolo è 40x40 e ci sono 14 rettangoli in ogni colonna, con un totale di 25 colonne. Questo copre un'area di gioco di 560x1000.Visualizzazione di rettangoli nella finestra di gioco con XNA

Questo è il codice che ho creato per fare la prima colonna di rettangoli sulla griglia di gioco:

Rectangle[] gameTiles = new Rectangle[15]; 

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

Sono abbastanza sicuro che questo funziona, ma naturalmente non posso confermarlo perché rettangoli non lo fanno renda sullo schermo per me vederli fisicamente. Quello che mi piacerebbe fare a scopo di debug è quello di rendere un bordo, o riempire il rettangolo con il colore così posso vederlo sul gioco stesso, solo per assicurarsi che funzioni.

C'è un modo per farlo accadere? O in qualche modo relativamente semplice, posso solo assicurarmi che funzioni?

Grazie mille.

risposta

23

primo luogo, fare una texture 1x1 pixel di bianco per il rettangolo:

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

Ora, è necessario per rendere il rettangolo - assumere il rettangolo è chiamato rectangle. Per un rendering di un blocco riempito, è molto semplice: assicurati di impostare il colore Color come colore desiderato. Basta usare questo codice:

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

Per un confine, è più complesso. È necessario disegnare le 4 linee che compongono il contorno (il rettangolo qui è 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 

Speranza che aiuta!

+1

+1 Grande risposta. Era esattamente quello che stavo cercando! Grazie –

+0

+1 breve e esattamente quello che mi serviva. – FRoZeN

0

Questo ha funzionato perfettamente se si desidera disegnare rettangoli sulle trame esistenti. Grande quando si desidera verificare/vedere di collisioni

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

----- From sito -----

Il trucco di base per forme di disegno è quello di rendere un singolo pixel trama che è bianca, che puoi quindi mescolare con altri colori e visualizzare in forme solide.

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

Poi nel metodo() Draw fare qualcosa di simile:

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

E il metodo effettivo che fa il disegno:

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