Clase Nº1
Métodos, texturas, rectángulos
Introduccion
¿Que vamos a aprender en el taller?
Programar juegos
Un poco de historia…
1950’s
 En 1952 sale el primer videojuego conocido, llamado
OXO. Es un juego de TaTeTi. Se demostro como una
aplicación de posible interaccion entre usuario y
computadora.
 En 1958 sale el primer videojuego con gráficos,
predecesor al Pong – es llamado Tennis for Two.
1960’s
 Sale el primer videojuego que logra tener un mínimo
grado de popularidad. Es llamado Spacewar! y es un
juego PvP en el que cada jugador debe destruir al otro
manejando una nave espacial
1970’s
 Nacen los fichines. Salen como alternativa a las
maquinas de flipper que eran muy populares en el
momento. Tienen un éxito considerable y
funcionaban teniendo a una computadora potente
manejando a 8 maquinas clientes simultáneamente.
1970’s
 Sale la primer consola de sobremesa, llamada
Magnavox Odyssey. Fue una innovación debido al bajo
precio de $100. No tenia ni CPU ni RAM – solo
transistores, resistencias y capacitores.
El disparo de las consolas
 Luego del nacimiento de la Odyssey, y la innovación de
poder tener una consola que corra cualquier cantidad
de juegos, comenzaron a evolucionar tanto las consolas
como los juegos
Evolución de las consolas
¿Qué es XNA?
 XNA es un conjunto de herramientas para desarrollar
principalmente juegos (es una API)
 Con XNA, se puede crear un juego para XBOX 360, PC
y Windows Phone 7, usando código similar entre ellos
 Sin mucho problema, se puede insertar código de
Silverlight en XNA
 Esta muy bueno
Haciendo un juego en 2D
 Los objetos son representados en la pantalla por su
textura correspondiente
 La posición del objeto que contiene a esta textura, esta
definida por un X y un Y que representan la posición
en la pantalla
Texture2D
 Representa una textura en dos dimensiones
 Una textura es una imagen que se usa para cubrir una
superficie de un objeto virtual
 Un texel es la mínima representación de una textura
Texture2D
Ejemplo:
Texture2D texMario;
texMario = Content.Load<Texture2D>("./mario");
(…)
spriteBatch.Draw(texMario, posicion, Color.White);
Vector2
 Un Vector2 es una estructura, que define una posición
en un espacio de dos dimensiones
 X, Y
 Se puede usar al Vector2 para definir la posición de
cualquier tipo de objeto gráfico
 Texture2D
 Letras (tipografía)
 Etcétera
 Se puede usar al Vector2, modificándolo para mover a
un objeto
Vector2
Ejemplo:
// Declaramos e inicializamos el vector…
Vector2 vector = new Vector2(50,50);
(…)
// Y luego lo dibujamos…
spriteBatch.Draw(texMario, vector, Color.White);
Rectangle
 Un Rectangle es una estructura que define un
rectángulo
 El rectángulo contiene cuatro propiedades


Tamaño (en X e Y)
Posición (en X e Y)
 El rectángulo nos sirve, entre otras cosas, para
 Definir la posición de un objeto gráfico (como un
Vector2)
 Definir el tamaño de este objeto
 Saber cuando un rectángulo colisiona con otro
Rectangle
La linea roja sería el rectangle
Arrancando motores
 La interfaz de XNA está dividida en varios métodos.
 Estos son:
 Initialize
 LoadContent
 UnloadContent (opcional)
 Update
 Draw
 También se especifican dos objetos, el
GraphicsDeviceManager y el SpriteBatch
Constructor
 En el constructor del programa se inicializa el
GraphicsDeviceManager y se setea la ruta donde está el
contenido de juego
public Game1()
{
graphics = new GraphicsDeviceManager(this);
Content.RootDirectory = "Content";
}
GDM y SB en síntesis
 El GraphicsDeviceManager nos permite gestionar
las operaciones con la tarjeta gráfica
 El SpriteBatch nos permite dibujar objetos en la
pantalla (texturas, tipografias)
public class Game1 : Microsoft.Xna.Framework.Game
{
GraphicsDeviceManager graphics;
SpriteBatch spriteBatch;
LoadContent y UnloadContent
 El LoadContent nos permite cargar elementos a la
memoria. También construye el manejador de texturas
 El Unload, nos permite descargar a los elementos ya
cargados
protected override void LoadContent()
{
spriteBatch = new SpriteBatch(GraphicsDevice);
// Ejemplo
texMario = Content.Load<Texture2D>("./mario");
}
Initialize
 En este método podemos inicializar todo lo que
queramos para cuando arranque el programa, esto
puede ser, contadores de vida, posiciones de vectores,
etc.
protected override void Initialize()
{
// Ejemplo
vidas = 5;
posicionPersonaje = new Vector2(50, 250);
base.Initialize();
}
Update
 Se repite todo el tiempo, hasta que se cierra el
programa.
 En él, volcamos toda la lógica del juego
 Con lógica me refiero a



Movimientos de personajes (jugables y no jugables)
Interacciones entre objetos (colisiones)
Etcétera
 Este es el método en el que van a escribir la mayoría
del código
Update
protected override void Update(GameTime gameTime)
{
KeyboardState keyboardState = Keyboard.GetState();
if (keyboardState.IsKeyDown(Keys.Left))
{ recMario.X -= 5; }
else if (keyboardState.IsKeyDown(Keys.Right))
{ recMario.X += 5; }
base.Update(gameTime);
}
Draw
 Se repite todo el tiempo, al igual que el Update,
aunque con menos frecuencia que este
 Por cada repetición, hay un fotograma
 En el, utilizamos al spriteBatch para dibujar todo lo
que necesitemos
 Texturas
 Modelos 3D
 Letras (tipografía)
Draw
protected override void Draw(GameTime gameTime)
{
GraphicsDevice.Clear(Color.CornflowerBlue);
spriteBatch.Begin();
spriteBatch.Draw(texMario, recMario, Color.White);
spriteBatch.DrawString(font, "Lives: " + vidas, new Vector2(50,
100), Color.White);
spriteBatch.End();
base.Draw(gameTime);
}
Usando el teclado
 Para usar el teclado, desde Update necesitamos
obtener el estado en el que esta
 Este estado nos sirve para saber si hay alguna tecla
presionada o levantada en el momento de la ejecución
 El estado del teclado se obtiene utilizando la función
Keyboard.GetState()
 Una vez que tenemos el estado del teclado, obtenemos
el estado de las teclas individualmente utilizando la
siguiente función booleana:
keyboardState.IsKeyDown/Up(Keys.Tecla)
Usando el teclado
Ejemplo:
KeyboardState keyboardState = Keyboard.GetState();
if (keyboardState.IsKeyDown(Keys.Left))
{
recMario.X -= 5;
}
Ayuda online
 http://www.xna.com/
 http://xnacommunity.codeplex.com/
 http://www.google.com/
 http://www.riemers.com/
[email protected]
Descargar

Diapositiva 1