7 votes

Affichage de rectangles dans la fenêtre de jeu avec XNA

Je souhaite diviser ma grille de jeu en un tableau de rectangles. Chaque rectangle fait 40x40 et il y a 14 rectangles dans chaque colonne, avec un total de 25 colonnes. Cela couvre une zone de jeu de 560x1000.

Voici le code que j'ai mis en place pour créer la première colonne de rectangles sur la grille du jeu :

Rectangle[] gameTiles = new Rectangle[15];

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

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

Existe-t-il un moyen d'y parvenir ? Ou un moyen relativement simple de s'assurer que cela fonctionne ?

Je vous remercie de votre attention.

23voto

Callum Rogers Points 6769

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

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

Il faut maintenant rendre le rectangle - supposons que le rectangle s'appelle rectangle . Pour le rendu d'un bloc rempli, c'est très simple - assurez-vous de définir la teinte. Color pour obtenir la couleur souhaitée. Il suffit d'utiliser ce code :

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

Pour une frontière, est-ce plus complexe ? Il faut tracer les 4 lignes qui constituent le contour (le rectangle est ici 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

J'espère que cela vous aidera !

0voto

Mastro Points 429

Cela fonctionne parfaitement si vous souhaitez dessiner des rectangles sur vos textures existantes. Idéal pour tester les collisions.

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

-----From Site-----

L'astuce de base pour dessiner des formes consiste à créer une texture d'un seul pixel de couleur blanche, que vous pouvez ensuite mélanger à d'autres couleurs et afficher sous forme de 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(), faites 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 qui effectue 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);
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X