lunes, 5 de abril de 2010

Desarrollo de un cuego 2D con XNA IV - Colocando un fondo

Estimados

Ya vimos en el post la estructura de un proyecto XNA en blanco, revisamos sus métodos y tuvimos la vertiginosa experiencia(jaja) de verlo funcionando.

Pues bien, en esta ocasión haremos algo un poco menos abúlico y se trata de colocar una imagen de fondo.

Me he valido para esto de unas imágenes y código que están en los proyectos de de la guía para principiantes del sitio de XnaCreators. Este sitio, que por cierto está buenísimo, introduce al desarrollo de juegos tanto en 2D como en 3D por medio de una serie de videos que están muy bien explicados, aunque en inglés lo que para algunos puede ser un poco incómodo.

Siguiendo elejemplo de XnaCreators he decidido presentar lo hecho en los videos que dejo a continuación.

LISTA DE VIDEOS



Les contaré que para grabar estos videos he usado una herramienta que me ha recomentado mi buen amigo Maic, se trata de JING, de los mismos creadores de Camtasia. Excelente y gratuita.

El código que contiene la clase Game1.cs de nuestro anterior proyecto en blanco, luego de este ejemplo es el siguiente:



   1:  using System;
   2:  using System.Collections.Generic;
   3:  using System.Linq;
   4:  using Microsoft.Xna.Framework;
   5:  using Microsoft.Xna.Framework.Audio;
   6:  using Microsoft.Xna.Framework.Content;
   7:  using Microsoft.Xna.Framework.GamerServices;
   8:  using Microsoft.Xna.Framework.Graphics;
   9:  using Microsoft.Xna.Framework.Input;
  10:  using Microsoft.Xna.Framework.Media;
  11:  using Microsoft.Xna.Framework.Net;
  12:  using Microsoft.Xna.Framework.Storage;
  13:   
  14:  namespace JuegoXNADemo1
  15:  {
  16:   
  17:      public class Game1 : Microsoft.Xna.Framework.Game
  18:      {
  19:          GraphicsDeviceManager graphics;
  20:          SpriteBatch spriteBatch;
  21:          Texture2D backgroundTexture;
  22:          Rectangle viewPortRect;
  23:   
  24:          public Game1()
  25:          {
  26:              graphics = new GraphicsDeviceManager(this);
  27:              Content.RootDirectory = "Content";
  28:          }
  29:   
  30:          /// <summary>
  31:          /// Allows the game to perform any initialization it needs to before starting to run.
  32:          /// This is where it can query for any required services and load any non-graphic
  33:          /// related content.  Calling base.Initialize will enumerate through any components
  34:          /// and initialize them as well.
  35:          /// </summary>
  36:          protected override void Initialize()
  37:          {
  38:              // TODO: Add your initialization logic here
  39:   
  40:              base.Initialize();
  41:          }
  42:   
  43:          /// <summary>
  44:          /// LoadContent will be called once per game and is the place to load
  45:          /// all of your content.
  46:          /// </summary>
  47:          protected override void LoadContent()
  48:          {
  49:              // Create a new SpriteBatch, which can be used to draw textures.
  50:              spriteBatch = new SpriteBatch(GraphicsDevice);
  51:              backgroundTexture = Content.Load<Texture2D>("background");
  52:              viewPortRect = new Rectangle(0, 0, graphics.GraphicsDevice.Viewport.Width, graphics.GraphicsDevice.Viewport.Height);
  53:              // TODO: use this.Content to load your game content here
  54:          }
  55:   
  56:          /// <summary>
  57:          /// UnloadContent will be called once per game and is the place to unload
  58:          /// all content.
  59:          /// </summary>
  60:          protected override void UnloadContent()
  61:          {
  62:              // TODO: Unload any non ContentManager content here
  63:          }
  64:   
  65:          /// <summary>
  66:          /// Allows the game to run logic such as updating the world,
  67:          /// checking for collisions, gathering input, and playing audio.
  68:          /// </summary>
  69:          /// <param name="gameTime">Provides a snapshot of timing values.</param>
  70:          protected override void Update(GameTime gameTime)
  71:          {
  72:              // Allows the game to exit
  73:              if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed)
  74:                  this.Exit();
  75:              
  76:              // TODO: Add your update logic here
  77:   
  78:              base.Update(gameTime);
  79:          }
  80:   
  81:          /// <summary>
  82:          /// This is called when the game should draw itself.
  83:          /// </summary>
  84:          /// <param name="gameTime">Provides a snapshot of timing values.</param>
  85:          protected override void Draw(GameTime gameTime)
  86:          {
  87:              GraphicsDevice.Clear(Color.CornflowerBlue);
  88:   
  89:              spriteBatch.Begin();
  90:              spriteBatch.Draw(backgroundTexture,viewPortRect,Color.White );
  91:              spriteBatch.End();
  92:   
  93:              // TODO: Add your drawing code here
  94:   
  95:   
  96:              base.Draw(gameTime);
  97:          }
  98:      }
  99:  }

Nuevamente y como siempre, saludos y gracias por darse el tiempo de leer este blog y que(como diría don Raúl Guerrero) nunca les falte "la pasión del desarrollador".

Manuel Gatica Holtmann

No hay comentarios:

Publicar un comentario

-__-