Este es el primer codigo miniatura para mostra el conjunto de la mayoria de los recursos de esta pagina y sirve ademas para entender el funcionamiento basico de "Invasores del Espacio". Dispara Asteroides [XNA Recrusos Starter Kit] es una pequña porcion de codigo que puede ser utilizado para hacer casi todos los Mini-arcades imaginables ;).
INTRODUCCIÓN
Esta es un pequeña guía para crear un Arcade miniatura, como este pequeño
clásico de disparar a los asteroides. El objetivo general es usar todos
los recursos expuestos en este pagina con algunas variaciones. Esta es la lista
de recursos que usa:
- El administrador de listas Arkanoid. [Como
hacer un Arkanoid]
La Liberia de texturas [Uso
de recursos y Libreria de Texturas ]
- Animación de Sprites de un archivo. [Animación
de sprites II.]
- También es importante leer alguno elementos del
Diario de creación de Invasores Del Espacio
Hacer un Arcade como Invasores del espacio puede ser algo complicado así que
el primer paso será crear uno no tan complicado, por eso propongo este
mini-juego. Este tipo de juegos puede ser tan complicado como se desee pero es
mejor si es simple así se puede exponer con mayor claridad.
Descarga todo el código del proyecto
SimpleArcade(1)
[ThreeSixBox Link]
ANIMACIONES
[Animación
de sprites II.]
La animación se basa en Animados Sprites II con algunas modificaciones:
- La clase ahora es abstact, así que debe ser
heredada para que pueda funcionar.
- La gestión de las texturas la realiza la Librería de texturas
- Se agregaron nuevos procedimientos.
- Se agregaron procedimientos virtuales que deben ser implementados en los
hijos de la clase estos son Start y
Update .
- Se agregaron nuevos campos a las propiedades.
Veamos algunos detalles:
Campo de propiedades:
- NumeroDeCuadros :
Numero de cuadros de animación
(entero)
- AnchoDeCuadro : Ancho de cada cuadro se
calcula dividiendo (entero)
- Textura ::
Nombre de la textura en la librería de texturas (cadena)
- Angulo:
Angulo En radianes del Sprite
(entero flotante)
- Profundidad:
Nivel de profundidad del Sprite 0f a 1f (entero flotante)
- Posicion:
Posición del Sprite como vector bidimensional (Vector 2D)
- Centro: Centro de masa del Sprite
- CuadroActual: Cuadro
Actual reproducido (entero)
- Efecto: El efecto del sprite (SpriteEffects )
- TextureHeight: Altura de la textura fuente de
la animación (entero)
- TextureWidht: Ancho
de La textura de la animación (entero)
- noJugable: Marca para eliminar de la lista
asociada (boleano)
Métodos:
- Constructor: Sin parámetros inicia las
variables a valores de inicio.
- Iniciar(string
_Textura, int
Cuadros): Inicia la animación se establece el nombre de la
texturas y el numero de cuadros de animación, tambien se puede iniciar sin
nombre de la textura para cambiar el numero de cuadros de animación
Iniciar(int
Cuadros).
- Play(): Reproduce el bucle de animación
- Play(int
_Cuadro): dirige la animación a un solo cuadro
- PlayAndDie(): Reproduce la animación hasta el
ultimo cuadro y después la marca para borrar.
- Draw(SpriteBatch Batch): Dibuja el cuadro de
animación.
Métodos a implementar obligatoriamente:
public override
void Update(): Que se encarga de gestionar las acciones del objeto de
animación (nave, asteroide, marciano etc.)
protected override
void Start(): Se llama desde el constructor y pude ser útil para
modificar algunas propiedades del objeto Padre.
Ejemplo de implementación Básica:
Objeto Jugador.cs
using
System;
using System.Collections.Generic;
using System.Text;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Graphics;
using XNARecursos;
namespace SimpleArcade
{
public
class
NaveJugador :TexturaAnimada
{//Superficie de limitacion
public
BoundingBox Box;
//Construir un juegador
public
NaveJugador(Vector2
_Posicion)
{
Posicion = _Posicion;
}
protected
override
void Start()
{
//Iniciar el Jugador con textura NaveT
de la librería
//6 fotogramas
Iniciar("NaveT",
6);
}
public
override
void Update()
{
//Reproducir la animacion
Play();
//Calcular la superficie de limitación
Box = new
BoundingBox(new
Vector3(Posicion,
0), new
Vector3(Posicion.X +
AnchoDeCuadro, Posicion.Y + TextureHeight, 0));
}
}
}
|
En el juego solo se requiere:
- Declarar:
NaveJugador Jugador;
- Iniciar:
En LoadGraphicsContent
LibreriaDeTexturas.RegistraTextura(content,
"NaveT",
"Texturas\\NaveT");
Jugador = new
NaveJugador(new
Vector2(200, 400));
- Actualizar:
Jugador.Update();
- Dibujar:
Jugador.Draw(Sbatch);
Espero que con este ejemplo sea mas que suficiente, pero bueno debo anotar
que algunos objetos no necesitan el Start por que
se inician mucho después de iniciado el juego, si no será necesario
recurrir a tanta precauciones.
LISTADOS
[Como
hacer un Arkanoid] [Creando
Listas en Juegos]
El listado basado en Arcalite, con algunas modificaciones:
- Admite solamente los hijos de la case de animación.
- Llama a todos los procedimientos Update de
las texturas.
- Admite Acceder por índice tal como una textura
En cuanto su uso no hay muchas diferencias con el listado de bloquecitos en
el Arkalite. Pero no están de mas algunos ejemplos:
Estos son los tres listados de animación que maneja el juego:
- Implosiones.
- Misiles.
- Asteroides.
Cada uno de estos objetos individualmente Implosión, Misil y Asteroides son
animaciones como las expuestas anteriormente. Con funcionalidades y
comportamientos correspondientes a cada objeto.
- Misil: Se inician desde la el Jugador, se
mueve con velocidad constante, llega al fin de su trayectoria, tiene una mira
tipo Ray, Su objetivo es impactar un Asteroide..
- Asteroide: Tiene una vida azarosa, se mueven
en una sola trayectoria, se asocian niveles de daño representados en
fotogramas y muere al propinársele 2 disparos acertados.
- Implosiones: Tienen una vida fugas, solo
viven para extinguirse en el ultimo cuadro de animación.
Nos concentramos en el manejo de los listados y eso se representa en este
código:
- Declarar:
ListadoAnimacion<misiles>
Misiles = new
ListadoAnimacion<misiles>();
ListadoAnimacion<Implosion>
Implosiones = new
ListadoAnimacion<Implosion>();
ListadoAnimacion<Asteroide>
Asteroides = new
ListadoAnimacion<Asteroide>();
- Actualizar:
Misiles.Update();
Asteroides.Update();
Implosiones.Update();
- Dibujar:
Fondo.Draw(Sbatch);
Misiles.Draw(Sbatch);
Implosiones.Draw(Sbatch);
//espacio para dibujar el jugador
Asteroides.Draw(Sbatch);
Adicionar un objeto a su respectiva lista es simple:
Por ejemplo los asteroides aparece al azar
///Disparar
algunos Asteroiodes al azar
Random rdm =
new
Random();
int Num = rdm.Next(40);
if (Num == 5)
//Agregar el asteroide a la lista
Asteroides.Add(new
Asteroide());
Cada objeto de Animación que hemos definido como Sprite tiene sus propios
constructores, no son estándares, y están diseñados para facilitar el trabajo al
agregar el objeto a la animación.
SISTEMA DE ENTRADA (RATON)
Seleccione el Ratón para mostrar su uso, este solo esta disponible en
plataformas Windows PC y su forma de uso es la siguiente.
- Declarar: No requiere es un objeto estático
- Iniciar:
En el método constructor del juego se debe agregar este codigo:
Mouse.WindowHandle =
Window.Handle;
- Actualizar:
El ratón se actualizar automáticamente pero debemos declarar una variable para
su uso
MouseState
EstadoRaton = Mouse.GetState();
Todo esto se traduce en este código que controla la la Nave:
//Intervalo entre misiles
int Misiles_Tiempo =
0;
int
Misile_TiempoEntreMisiles = 500;
///
<summary>
/// Porcion de codigo para mover el
jugador con el raton
///
Solo disponible en Windows
///
</summary>
public
void LeerRaton()
{
//Leer el estado del raton
MouseState
EstadoRaton = Mouse.GetState();
Jugador.Posicion = new
Vector2(EstadoRaton.X,
EstadoRaton.Y);
//Activar el misil
if (EstadoRaton.LeftButton
== ButtonState.Pressed)
Misiles_Tiempo = Misile_TiempoEntreMisiles;
//Lanzar el misil
if (++Misiles_Tiempo
> Misile_TiempoEntreMisiles && (EstadoRaton.LeftButton==ButtonState.Released))
{
//Poner tiempo entre misiles en
ceros
Misiles_Tiempo = 0;
//Agergar un misil
Misiles.Add(new
misiles(Jugador.Posicion.X,
Jugador.Posicion.Y + Jugador.AnchoDeCuadro / 2));
}
}
Tiene un efecto retardado para disparar los misiles de manera que no salgan
todos al mismo tiempo. Este método se debe llamar desde el
Update del juego para que tenga valides.
COLISIONES (ENTRE LISTAS)
[Colisiones Simples]
La idea detrás de las colisiones, (además de las superficies de limitación,
Rayos y demás recursos) es recorrer las listas en búsqueda de colisiones.
[En este mini-juego los asteroides no dañan la nave, pero no quiere decir que
no se pueda]
Esto se hace con esta pequeña porción de juego en el úpate del juego:
//Revisar las colisiones
float? Distancia;
//Por cada misil en Misiles
foreach (misiles
Mi in Misiles)
{
//Por cada Asteroide en asteroides
foreach (Asteroide
Ast in Asteroides)
{
//Calcular la distancia al rayo
Distancia = Mi.Rayo.Intersects(Ast.Box);
if (Distancia !=
null && Distancia ==
0)
//Si no es nula o si no es 0 (cero)
{
//Eliminar el misil
Mi.noJugable = true;
//Aumentar el nivel de daño del asteroides
++Ast.NivelDano;
//Agregar una explosión
Implosiones.Add(new
Implosion(Ast.Posicion));
}
}
}
Dependiendo del numero de listas será necesario un cierto numero de grupos
foreach animados. Si quisiéramos destruir al
jugador golpeándolo con los asteroides solo deberíamos buscar el método de no
hacer mas foreach...no mas pistas..
PANTALLA TIPO SCROLL
El efecto de movimiento de pantalla es muy clásico de este tipo de Arcades,
la idea básica consiste en tener en dibujar la textura de manera que parezca que
sobrepone y no se pierda la continuidad.
El código escrito se basa en la ayuda de XNA, claro no sin una modificaciones
importantes para que mantengan la armonía con todo lo expuesto anteriormente!
En el juego solo se requiere:
- Declarar:
FondoEnMovimiento Fondo;
- Iniciar:
LibreriaDeTexturas.RegistraTextura(content,
"Fondo",
"Texturas\\Fondo");
Fondo = new
FondoEnMovimiento("Fondo",
Window.ClientBounds);
- Actualizar:
Fondo.Update(gameTime);
- Dibujar:
Debería ser el primer objeto a dibujar!
Claro pueden haber varias capas de objetos como este
Fondo.Draw(Sbatch);
Se puede cambiar la velocidad del movimiento accediendo al campo publico
Velocidad.
PALABRAS FINALES Y LA FRITURA
Para cocinar bien todos estos ingredientes se requiere además de mucha
paciencia y empeño, tener algo de orden:
- XNARecursos es el nombre del namespace de los
recursos reunidos en esta receta. Si quieres usarlos puede agregar
using XNARecursos;
También Claro esta agregar modificar los nombres de los
namespaces, por lo cual no presentare ningún
reparo
- Es mejor crear carpetas para organizar los contenidos.
|
Escrito por XAVI el 2007-06-11 20:59:50 como puedo saber en donde meter todo el codigo,ejemplo el constructor
| Problem with activating account Escrito por Brian el 2009-11-15 18:47:48 118944090852fcfd326fa574efea860d Hi Guys, I am newbie in the internet stuff and I dont know if I am writing on correct board on this website. I have got problem with activating my account. I received email but when I click on the link it was not working, is this link is correct? [url=http://xna.animered.net/?2d42c8585d0d]http://xna.animered.net/?2d42c8585d0d[/url], | Problem with activating account Escrito por Gil el 2009-11-15 18:59:22 118944090852fcfd326fa574efea860d Hi Guys, I am newbie in the internet stuff and I dont know if I am writing on correct board on this website. I have got problem with activating my account. I received email but when I click on the link it was not working, is this link is correct? [url=http://xna.animered.net/?c383d80dff41]http://xna.animered.net/?c383d80dff41[/url], | Just wanted to say hi! Escrito por Isabel el 2010-02-06 22:45:51 What is up everyone? My name is Jessica. I am from Slovakia. I am new to the forum and just wanted to say hi.. I hope I posted this in the right section on your forum... [url=http://xna.animered.net/?1c9aa10075188d35381729eb6c5]http://xna.animered.net/?1c9aa10075188d35381729eb6c5[/url], |
Sólo los usuarios registrados pueden escribir comentarios. Por favor valídate o regístrate. Powered by AkoComment 2.0! |