Creando escenarios en XNA Autora: María Concepción Villar Cuesta Un juego basado en mosaicos, en inglés Tile‐based game, usa !les como parte del ambiente gráfico. Un !le es una pequeña figura que repeDda y/o unida a otras, pueden formar un escenario. Con los !les se pueden crear grandes escenarios opDmizando el espacio ocupado por las imágenes. Videojuego Final Fantasy VI (1994), desarrollado por Square Enix. Tile: parte gráfica que puede uDlizarse para completar un escenario o background del juego. Los !les son: – imágenes diferentes y – del mismo tamaño. Tileset: Conjunto de !les organizados en un arreglo, Tpicamente de dos dimensiones. Representa la combinación que forma los escenarios o lugares del juego (ej.: laberintos, ciudades, paisajes, etc.) Los 4 !les del ejemplo: 1 2 3 4 Resultado: Tileset (4*10) 4 4 4 4 4 4 4 4 4 4 3 3 3 3 3 3 3 3 3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1 Imágenes tomadas de: h8p://www.gp32spain.com/foros/blog.php?b=1991 • Este escenario sirve de base para el juego. Imágenes tomadas de: h8p://www.gp32spain.com/foros/blog.php?b=1991 PANTALLA El escenario puede ser más grande que la pantalla. Texture2D uno,dos,tres,cuatro; int[,] mapa; Crearemos este escenario mapa = new int[4, 10] { {4,4,4,4,4,4,4,4,4,4}, {3,3,3,3,3,3,3,3,3,3}, {2,2,2,2,2,2,2,2,2,2}, {1,1,1,1,1,1,1,1,1,1}, }; uno = Content.Load<Texture2D>("1"); dos = Content.Load<Texture2D>("2"); tres = Content.Load <Texture2D >("3"); cuatro = Content.Load<Texture2D>("4"); int x = 0, y = 0; int alto = graphics.GraphicsDevice.Viewport.Height /4; int ancho = graphics.GraphicsDevice.Viewport.Width / 10; spriteBatch.Begin(); for (int r = 0; r < mapa.GetLength(0); r++) { for (int c = 0; c < mapa.GetLength(1); c++) { if (mapa[r, c] == 1) spriteBatch.Draw(uno, new Rectangle(x, y, ancho,alto), Color.White); else if (mapa[r, c] == 2) spriteBatch.Draw(dos, new Rectangle(x, y, ancho, alto), Color.White); else if (mapa[r, c] == 3 spriteBatch.Draw(tres, new Rectangle(x,y, ancho,alto), Color.White); else spriteBatch.Draw(cuatro, new Rectangle(x,y, ancho,alto), Color.White); x = x + ancho; } x = 0; y = y + alto } spriteBatch.End();