Archivo

Archive for the ‘XNA’ Category

[XNA] Introducción a los juegos multijugador (1/?)

enero 25, 2009 3 comentarios

Los juegos multijugador online, son difíciles de manejar desde código. Pero esto en XNA es diferente ya que no debemos preocuparnos tanto por la comunicación entre las PC’s y las consolas de Xbox 360. Esto porque XNA encapsula toda esta complejidad en un marco de conexión.

¿Por qué son difíciles los juegos online desde código?

Porque hay muchos más problemas para hacerle frente a cosas como: el programa que recibirá los mensajes del anfitrión o de otros jugadores, enviar mensajes, el proceso de entrada de jugador local, llevar a cabo la inteligencia artificial, física, cálculos y al mismo tiempo no dejar congelada la pantalla.

Como soluciona esto XNA

XNA nos ayuda con la mayoría de estos problemas de comunicación, ya que nos proporciona los medios para controlar el flujo de los mensajes entre los agentes para garantizar que los mensajes no se pierdan y que todos los mensajes lleguen en el mismo orden en que fueron enviados. Sin embargo aun tenemos que resolver otros problemas.

Aunque la codificación de un juego multijugador completo podría ser difícil, los pasos básicos son simples para la creación de un juego multijugador en donde varios jugadores se puede conectar. Existen cuatro pasos para un juego multijugador:

  1. Registrar un jugador (en un equipo local o remoto)
  2. Crear un periodo de sesiones, así como el establecimiento de sus propiedades
  3. Esperar a otros jugadores a unirse
  4. Cambiar el estado de la sesión a “Play”

Ahora vamos a ver como crear una clase sencilla, que nos servirá para aprender las bases de como crear un juego en red en XNA.

Todo inicio en el año 2002 cuando Microsoft lanzo lo que conocemos hoy como Xbox LIVE, en donde la intención principal es proporcionar un servicio en línea para la distribución de los contenidos de juegos (demos, trilers y contenidos extras de cada juego como mapas) y la conexión de los jugadores en el Xbox. Fue en el año de 2007 donde Microsoft amplio este servicio para Windows con el lanzamiento de Windows LIVE. Desde XNA podemos conectarnos a ambos servicios. XNA encapsula toda la manipulación de los perfiles en Vivo con el espacio de nombres GamerServices, lo que hace más fácil la creación de cuentas, conectarse a un perfil y también utilizar muchos dispositivos en vivo, así como la guía de pantallas para manipular la información del jugador.

La forma más sencilla de acceder a estos elementos es a través  del GamerServicesComponent que nos permite por ejemplo responder a la interacción del usuario, por ejemplo: la presentación de la Guía LIVE cuando  el usuario presiona Start.

Pero vamos a ver esto con un ejemplo sencillo. Comencemos creando un nuevo proyecto de tipo Windows Game al que llamaremos XNADemo. A continuación abrimos la clase Game1.cs y vamos a incluir la siguiente línea de código en el constructor de la clase, justo después de la línea que establece el contenido del directorio raíz.

//Agregamos el Componente que hace referencia a nuestro juego
Components.Add(new GamerServicesComponent(this));

Si ahora ejecutamos nuestra juego y como no disponemos de un perfil en LIVE configurado para inicio de sesión automático nos muestra la siguiente pantalla para crear un perfil.

image(Si  No se muestra esta pantalla presione la tecla Inicio)

Aquí tenemos 2 opciones, que es la de crear un nuevo perfil o exportar uno existente. (Para mostrar el funcionamiento crearemos un nuevo perfil). Entonces seleccionamos Crear perfil nuevo

image (Asignamos un nombre a nuestro perfil)

Al dar un nombre a nuestro perfil, damos clic en Enviar (Presionamos A en caso de trabajar con el Xbox 360). Este nombre de perfil (que puede modificar más adelante) se utilizará para identificar cuando estés  jugando juegos en red.

y después de esto nos muestra una pantalla con 3 opciones.

image

(Guardar Perfil del Jugador)

La primera opción nos permite unirnos al sitio de  Windows-LIVE . Después podemos personalizar nuestro Perfil (por ejemplo, el perfil de imagen), según nuestras preferencias. Podemos cerrar la ventana haciendo clic en el botón Listo.

Ahora damos clic en Listo, y vamos a trabajar con nuestra clase para manejar los estados de sesión para poder incorporarlos a un juego. Pero esto lo vemos en otro Post 😛

Etiquetas de Technorati: ,,,

Geek Fest 2.0 mañana en la UNEVE

octubre 6, 2008 Deja un comentario

El día de mañana estaré dando una platica sobre XNA, en donde abordare principalmente el conectividad, donde daremos un ejemplo de que es lo que necesitamos hacer y tomar en cuenta para que nuestro juego pueda jugarse en línea, estaré colgando mañana por la tarde las pptx’s  y las demos, aquí les dejo la agenda por si alguien quiere ir:

image

Nos vemos mañana en Ecatepec 😀

Etiquetas de Technorati: ,,,

Nuevo sitio de desarrollo Web de Microsoft

octubre 2, 2008 Deja un comentario

Plataforma Web de Microsoft para: el hogar, diseño, foros, blogs, etc. Todo sobre como poner en practica las tecnologías de Microsoft para tener una web innovadora. 🙂

Se ve bastante bien el sito, en donde encontramos infinidad de recursos, aquí una miradita:

webms

 

Como se observa en la figura, podemos acceder a información sobre eventos, blogs, productos, etc. así que les recomiendo que le echen un vistazo y me cuenten como les va, seria una buena idea hacer algo así para estudiantes, no creen?

URL: http://www.microsoft.com/web/default.aspx

XNA Game Studio 3.0 Beta en camino

septiembre 12, 2008 Deja un comentario

Aunque aún falta tiempo, aquí unos detalles de esta última versión d XNA Game Studio.

untitled

Zune:

  • Compatibilidad con la próxima versión de firmware 3.0 de Zune
  • Estabilidad de implementación mejorada.
  • Soporte para la implementación de ZUNE en Windows Vista x64.
  • Ahora se podrá usar el monitor de rendimiento remoto para juegos de Zune.

Xbox 360

  • Plantillas para proyectos de Xbox 360 (aunque no se podrán realizar proyectos de Xbox 360 hasta la versión final)

Framework y características en Visual Studio

  • Enumerate and play back media on your Windows computer or Xbox 360.
  • Simple sound effect support on Windows computers and Xbox 360.
  • Support for Rich Presence (lets friends know what’s going on in your game).
  • Support for Invites (ask your friends to join you in a multiplayer game) and Join Session In Progress (after you see what your friends are doing, you can join their current session with just a couple of button presses, even if that’s a different game to the one you are currently playing)
  • Compress your content and save space with the new content compression features!
  • ClickOnce packaging support for distributing your XNA Framework games on Windows.
  • Upgrade your project from XNA Game Studio 2.0 using the Project Upgrade Wizard!
  • Take screen captures of your game running on Zune through the XNA Game Studio Device Center.
  • Support for .NET language features like Linq
  • Create multiple content projects and leverage cross project synchronization in Visual Studio.
  • FBX importer improvements: read materials containing multiple textures, and export custom shader materials directly out of Max or Maya.

Al parecer esta versión será lanzada la próxima semana, así que estaremos pendientes. De igual manera parecer que seta Beta será algo muy cercano a la versión final, así que si encuentran alguna problema (casi nunca sucede :P), tenderemos que reportarlo para que no este en la última versión 😀

 

Etiquetas de Technorati: ,,,

Descarga Libro de XNA

agosto 13, 2008 2 comentarios

Ya hace tiempo que revise el libro de Rob Miles, que escribió sobre XNA Game Studio 2.0, y hoy en su página me encuentro con que puedes descargar algunos capítulos de este libro. así que aquí te dejo la URL para que los descarguen.

                                      untitledXNA

Los capítulos parecen ser los primeros cuatro y el tema de XNA Hypnotic Display, así que desde aquí lo pueden descargar:

URL: http://www.robmiles.com/xna-book-downloads/

Categorías:Games, Xbox, XNA

MSDN Center de XNA en Español

julio 11, 2008 Deja un comentario

Así es amigos, ya esta en línea un sitio en MSDN latam un lugar dedicado a XNA Game Studio totalmente en español, con información sobre ¿Qué es XNA?, Aprender, Presentaciones, Novedades, Comunnity Games, FAQs y claro Creators Club.

top

Espero que si les interesa saber más sobre este producto, no dejen de visitar este sitio, y seguir aprendiendo de XNA Game Studio el cual esta formado  con recursos y comunidades que se centran en permitir a los desarrolladores de juegos tener éxito en la plataforma de juego de Microsoft.

URL: http://www.microsoft.com/spanish/msdn/latam/xna/default.aspx

Etiquetas de Technorati: ,,,
Categorías:Games, Xbox, XNA

[Tips – XNA] Detección de Colisones

junio 19, 2008 1 comentario

Aquí vamos hacer uso de un par te rectángulos, que junto con la propiedad de intersección se encargara de la intersección, es decir; el rectángulo de un automóvil con el de otro, que en mi caso se trata del camaro y de los otros coches, bien, aquí necesitaremos de cargar otro Sprite, de realizar un método llamado MueveOtros Atuos(), de la colisión y por ultimo de dibujar dichos otros autos. Entonces primero declaramos las variables a utilizar que son las siguientes:

//varibales de los autos
        Texture2D[] Coches = new Texture2D[2];
        Vector2[] posCoches = new Vector2[2];

        //donde apareceran los autos en el eje X y en Y
        int[] posX = { 270, 428 };
        int posAleatoria;

        //varibale para determinar la posicion aleatoria
        Random ran = new Random();
        //recatngulo de los otros coches
        Rectangle[] recCoches = new Rectangle[2];
        
        //variable bool de detección de colision
        bool deteccionActiva = true;

        //velocidad de los coches
        int velCoches = 3;

Como se observa, aquí son mas variables, pero de igual manera se indica para que nos sirven cada una de ellas, ahora el paso siguiente es la carga del Sprite de los otros autos, como se observa en la declaración de la textura y del vector se trata de un arreglo y en este caso es para 2 valores, bien entonces el Sprite que se llama “carros” que está en la carpeta Content lo cargamos en el método protected override void LoadContent() dentro de un for, y queda así:

//carga del sprite de los otros autos
            for (int i = 0; i < 2; i++)
            {
                //carga de los sprites
                Coches[i] = Content.Load<Texture2D>("carros");
                //posicion aleatoria en Y
                posAleatoria = ran.Next(-1000, 0);
                posCoches[i].Y = posAleatoria;
                //posicion en X, solo 2 valores
                //del lado der o izq del camino
                posAleatoria = ran.Next(0, 2);
                posCoches[i].X = posX[posAleatoria];
                

            }

Como con los otros ejemplos, ahora sigue trabajar con el método Update(), que es aquí en donde llamamos al método MoverOtrosAutos(), que como su nombre lo dice se utiliza la lógica para que los otros coches se mueven solos y de manera aleatoria. La definición y cuerpo del método va con este código:

//método para mover los coches
        private void MueveOtrosAutos()
        {
            int maxHeight = graphics.PreferredBackBufferHeight;
            for (int i = 0; i < 2; i++)
            {
                
                posCoches[i].Y += velCoches;
                if (posCoches[i].Y > maxHeight)
                {
                    posAleatoria = ran.Next(-1000, 0);
                    posCoches[i].Y = posAleatoria;
                    posAleatoria = ran.Next(0, 2);
                    posCoches[i].X = posX[posAleatoria];
                }               
            }
        }

Se observa en el método que la definición de vector de los coches en la posición X y Y es similar a la de la carga de los Sprites, por lo de mas solo se limita al alto de la pantalla para que estos aparezcan al inicio de la misma y se muevan hacia abajo. Para observar cómo es que aparecen los coches aleatoriamente, solo resta la parte de dibujarlos en pantalla, todo esto dentro del método protected override void Draw(GameTime gameTime) y esto después de dibujar el camino y el camaro, el código es este:

//dibujamos los autos
           //en este caso solo son 2
           for (int i = 0; i < 2; i++)
           {
               spriteBatch.Draw(Coches[i], posCoches[i], Color.White);
           }

Y si toda va bien, compilamos y ejecutamos nuestro proyecto y podemos ver como aparecen nuestros autos a evadir, pero sin embargo si topamos con uno de ellos no pasa nado, esto se observa como en las siguientes imágenes.

image image

Para solucionar este problema de que se encimen las texturas, es aquí en donde declaramos nuestros rectángulos para la detección de la colisión, entonces inicializamos dichos rectángulos dentro del método protected override void Update(GameTime gameTime) y la definición e inicialización de dichos rectángulos es así:

//inicialización de los rectangulos
           //para detectar la colision

//recangulo del camaro
Rectangle recCamaro = new Rectangle((int)posCamaro.X, (int)posCamaro.Y, 
    Camaro.Width, Camaro.Height);
//rectangulo de los otros coches
for (int i = 0; i < 2; i++)
{
 recCoches[i] = new Rectangle((int)posCoches[i].X, (int)posCoches[i].Y, 
          Coches[i].Width, Coches[i].Height);
}

Ya que tenemos esto, ahora hacemos uso de la variable booleana deteccionActiva dentro del mismo método Update() la cual colocamos después de llamar al método MoverOtros Autos() y con una condición que va de esta manera:

//colisión de los rectangulos
                for (int j = 0; j < 2; j++)
                {
                    if (recCamaro.Intersects(recCoches[j]))
                        deteccionActiva = false;
                }

Para poder identificar esto, trabajamos dentro del método Draw() y colocamos una condición para dibujar al camaro, que funciona o se dibuja solo si la variable deteccionActiva esta activa, si esta en false que indica que existe dicha colisión, el camaro no será dibujado, y entonces queda así:

//dibujar el camaro
            if (deteccionActiva == true) 
                spriteBatch.Draw(Camaro, posCamaro, Color.White);

De esta manera cuando choquen los autos el camaro desaparece. Para terminar con este pequeño tutorial, cuando choque se sale del juego. Con esta pequeña condición para que pinte una explosión cuando esto suceda.

 

else if (deteccionActiva == false)
           {
               spriteBatch.Draw(choque, posCamaro, Color.White);
               deteccionActiva = true;
               base.ResetElapsedTime();
               base.Exit();
           }

Categorías:Games, Tips, XNA