How to draw a dynamic grid using XNA

I am trying to create a grid using the XNA infrastructure, this grid should have a fixed dimension during XNA execution, but it should be possible for the user to configure it before launching the game page (I created my application using the silverlight / xna template).

Does anyone have a suggestion on how to achieve this?

thanks

+4
source share
2 answers
ContentManager contentManager; GameTimer timer; SpriteBatch spriteBatch; LifeGrid life; int tileSize = 32; Vector2 position = Vector2.Zero; Texture2D gridTexture; int[,] map; public GamePage() { InitializeComponent(); // Get the content manager from the application contentManager = (Application.Current as App).Content; // Create a timer for this page timer = new GameTimer(); //timer.UpdateInterval = TimeSpan.FromTicks(333333); timer.UpdateInterval = TimeSpan.Zero; timer.Update += OnUpdate; timer.Draw += OnDraw; List<Position> p = new List<Position>(); p.Add(new Position(1,1)); p.Add(new Position(1,4)); p.Add(new Position(1,5)); p.Add(new Position(1,6)); p.Add(new Position(1,7)); this.life = new LifeGrid(10, 10, p); map = new int[,]{{1, 1, 0,},{0, 1, 1,},{1, 1, 0,},}; // LayoutUpdated += new EventHandler(GamePage_LayoutUpdated); } /// <summary> /// Allows the page to draw itself. /// </summary> private void OnDraw(object sender, GameTimerEventArgs e) { // SharedGraphicsDeviceManager.Current.GraphicsDevice.Clear(Color.CornflowerBlue); // SharedGraphicsDeviceManager.Current.GraphicsDevice.Clear(Color.Black); // Draw the sprite spriteBatch.Begin(); for (int i = 0; i <= map.GetUpperBound(0); i++) { for (int j = 0; j <= map.GetUpperBound(1); j++) { int textureId = map[i, j]; if (textureId != 0) { Vector2 texturePosition = new Vector2(i * tileSize, j * tileSize) + position; //Here you would typically index to a Texture based on the textureId. spriteBatch.Draw(gridTexture, texturePosition, null, Color.White, 0, Vector2.Zero, 1.0f, SpriteEffects.None, 0f); } } } spriteBatch.End(); } 
+1
source

Set tileSize, and then draw a texture to fit the desired mesh.

Here are some reworked codes. So I will start by creating a tilemap using a 2d array.

 int tileSize = 32; Vector2 position = Vector2.Zero; Texture2D gridTexture; int[,] map = new int[,] { {1, 1, 0,}, {0, 1, 1,}, {1, 1, 0,}, }; 

Then add something like this paint function:

 for (int i = 0; i <= map.GetUpperBound(0); i++) { for (int j = 0; j <= map.GetUpperBound(1); j++) { int textureId = map[i, j]; if (textureId != 0) { Vector2 texturePosition = new Vector2(i * tileSize, j * tileSize) + position; //Here you would typically index to a Texture based on the textureId. spriteBatch.Draw(gridTexture, texturePosition, null, Color.White, 0, Vector2.Zero, 1.0f, SpriteEffects.None, 0f); } } } 
+1
source

Source: https://habr.com/ru/post/1379881/


All Articles