c# grid xna rectangles

c# - Mostrar rectángulos en la ventana del juego con XNA



grid rectangles (2)

Quiero dividir mi cuadrícula de juego en una matriz de rectángulos. Cada rectángulo es 40x40 y hay 14 rectángulos en cada columna, con un total de 25 columnas. Esto cubre un área de juego de 560x1000.

Este es el código que he configurado para hacer la primera columna de rectángulos en la cuadrícula del juego:

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

Estoy bastante seguro de que esto funciona, pero por supuesto no puedo confirmarlo porque los rectángulos no se muestran en la pantalla para que los vea físicamente. Lo que me gustaría hacer con fines de depuración es hacer un borde, o llenar el rectángulo con el color para que pueda verlo en el juego, solo para asegurarse de que esto funcione.

¿Hay una manera de hacer que esto suceda? ¿O de forma relativamente simple, puedo asegurarme de que esto funcione?

Muchas gracias.


Primero, crea una textura de 1x1 píxeles de blanco para el rectángulo:

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

Ahora, necesita renderizar el rectángulo - suponga que el rectángulo se llama rectangle . Para renderizar un bloque relleno, es muy simple: asegúrese de configurar el Color del tinte para que sea del color que desee. Solo usa este código:

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

Para un borde, es más complejo. Debes dibujar las 4 líneas que forman el contorno (el rectángulo aquí es 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

¡Espero eso ayude!


Esto funcionó perfecto si desea dibujar rectángulos sobre sus texturas existentes. Genial cuando quieres probar / ver para colisiones

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

----- Del sitio -----

El truco básico para dibujar formas es hacer una textura de un solo píxel que sea blanca, que luego puede mezclar con otros colores y mostrar en formas sólidas.

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

Luego, en su método Draw () haga algo como:

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

Y el método real que hace el dibujo:

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