2010-05-08 5 views
7

Je veux diviser ma grille de jeu en un tableau de rectangles. Chaque rectangle est 40x40 et il y a 14 rectangles dans chaque colonne, avec un total de 25 colonnes. Cela couvre une zone de jeu de 560x1000.Affichage des rectangles dans la fenêtre de jeu avec XNA

C'est le code que je l'ai mis en place pour faire la première colonne de rectangles sur la grille de jeu:

Rectangle[] gameTiles = new Rectangle[15]; 

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

Je suis assez sûr que cela fonctionne, mais bien sûr, je ne peux pas le confirmer parce que les rectangles ne le font pas rendre sur l'écran pour moi de les voir physiquement. Ce que je voudrais faire à des fins de débogage est de rendre une bordure, ou de remplir le rectangle avec des couleurs afin que je puisse le voir sur le jeu lui-même, juste pour m'assurer que cela fonctionne.

Y a-t-il un moyen d'y arriver? Ou de toute façon relativement simple, je peux juste m'assurer que cela fonctionne?

Merci beaucoup.

Répondre

23

Tout d'abord, faire une texture de pixel 1x1 blanc pour le rectangle:

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

Maintenant, vous devez rendre le rectangle - supposons que le rectangle est appelé rectangle. Pour un rendu d'un bloc rempli, il est très simple - assurez-vous de définir la teinte Color comme étant la couleur que vous voulez. Il suffit d'utiliser ce code:

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

Pour une bordure, est-ce plus complexe. Vous devez dessiner les 4 lignes qui composent les grandes lignes (le rectangle ici est 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 

Hope it helps!

+1

+1 Grande réponse. Était exactement ce que je cherchais! Merci –

+0

+ 1 court et exactement ce dont j'avais besoin. – FRoZeN

0

Cela a fonctionné parfaitement si vous voulez dessiner des rectangles sur vos textures existantes. Idéal lorsque vous voulez tester/voir les collisions

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

----- ----- à partir du site

L'astuce de base à des formes de dessin est de faire un seul pixel texture qui est blanche, que vous pouvez ensuite mélanger avec d'autres couleurs et afficher dans des formes solides.

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

Ensuite, dans votre méthode Draw() faire quelque chose comme:

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

Et la méthode actuelle qui fait le dessin:

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