XNA Game Studio: Cómo guardar y cargar saves en el XBOX360

Febrero 26th, 2009  |  Publicado en Uncategorized

Hemos notado que existen muchos lugares en internet donde se muestra cómo cargar y guardar savestates para los juegos desarrollados con el XNA Game Studio. Sin embargo, los ejemplos que muestran son un poco complicados para las personas que empiezan a experimentar con la programación, por lo que decidimos explicarlo de la manera más simple posible, de hecho, esta es una version simplificada del ejemplo que puedes encontrar en XNA Creators Club.

Este tutorial asume que el usuario ya cuenta con los siguientes requisitos:

  • Cuentas con un XBOX 360 Game Project creado en el Visual Studio
  • Este proyecto guarda todas las variables del jugador en una clase llamada Jugador.cs
  • El proyecto cuenta con una clase llamada Control, la cual tiene como atributo publico el objeto Jugador que guarda todos los datos.

Una vez que cuentas con estas cosas, lo primero que vamos a hacer es hacer serializable tu clase Jugador.cs, lo cual es muy simple, lo único que debemos agregar es la siguiente etiqueta antes de la declaración de la clase:

[Serializable]
public class Jugador{

//Cuerpo de la clase, se queda exactamente como lo tenías anteriormente

}

Listo! tu clase se encuentra lista para poder ser guardada en un archivo, y poder ser cargado una y otra vez. Nota importante: Si en vez de guardar datos primitivos (int, double, String, etc..) guardas clases hechas por tí, debes poner la etiqueta [Serializable] también a estas clases, de otra manera XNA no sabrá cómo guardarlas y no servirá

Lo siguiente que haremos será agregar a tu proyecto de XBOX 360 una clase llamada Serializador.cs, que contará con dos métodos: GuardarJuego y CargarJuego.


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.Xna.Framework.Storage;
using System.IO;
using System.Xml.Serialization;
using Microsoft.Xna.Framework.GamerServices;
using Microsoft.Xna.Framework;

namespace MiNamespace
{
///


/// Utilizado para guardar y cargar los datos del jugador
///

public class Serializador
{

StorageDevice device;

public void GuardaJuego() {
if(!Guide.IsVisible){
device = null;
Guide.BeginShowStorageDeviceSelector(PlayerIndex.One, GetDevice, null);
}
}

private void GetDevice(IAsyncResult result)
{
device = Guide.EndShowStorageDeviceSelector(result);
if (device.IsConnected)
{
DoSaveGame(device);
}
}

private void DoSaveGame(StorageDevice device)
{
// Cambiar MiJuego por el nombre de tu juego en particular
StorageContainer container =
device.OpenContainer(”MiJuego”);

// Get the path of the save game.
string filename = Path.Combine(container.Path, “SaveMiJuego.sav”);

// Open the file, creating it if necessary.
FileStream stream = File.Open(filename, FileMode.Create);
// Convert the object to XML data and put it in the stream.
XmlSerializer serializer = new XmlSerializer(typeof(Jugador));
serializer.Serialize(stream, Control.jugador);

// Close the file.
stream.Close();

// Dispose the container, to commit changes.
container.Dispose();
}

public void AbreJuego()
{

if(!Guide.IsVisible){
device = null;
Guide.BeginShowStorageDeviceSelector(PlayerIndex.One, GetLoadingDevice, null);
}
}

private void GetLoadingDevice(IAsyncResult result)
{
device = Guide.EndShowStorageDeviceSelector(result);
if (device.IsConnected)
{
DoLoadGame(device);
}
}

private static void DoLoadGame(StorageDevice device)
{
// Cambiar MiJuego por el nombre de tu juego.
StorageContainer container =
device.OpenContainer(”MiJuego”);

// Get the path of the save game.
string filename = Path.Combine(container.Path, “SaveMiJuego.sav”);

// Check to see whether the save exists.
if (!File.Exists(filename))
{
return;
}

// Open the file.
FileStream stream = File.Open(filename, FileMode.OpenOrCreate,
FileAccess.Read);

// Read the data from the file.
XmlSerializer serializer = new XmlSerializer(typeof(Jugador));
Control.jugador = (Jugador)serializer.Deserialize(stream);

// Close the file.
stream.Close();

// Dispose the container.
container.Dispose();
}

}

}

Ya tenemos nuestra clase Serializador. Ahora cada vez que necesitemos guardar el juego lo único que tenemos que hacer es mandar llamar a Serializador.GuardaJuego() o Serializador.CargaJuego().

Esperamos que les sirva de mucho este tutorial. ¡No olviden escribir su comentarios!

Conectar la XBOX360 a LIVE a través de un router Thomson ST585v6

Enero 15th, 2009  |  Publicado en Tutoriales

El día de ayer para comenzar el desarrollo del proyecto presidente360 necesitábamos conectar la XBOX de la oficina a internet pero nos encontramos con ciertas dificultades técnicas. A continuación les presento el proceso para conectarse al servicio LIVE estando detrás de un router Thomson ST585v6:

0. Preparar la conexión (opcional)

Como ya me comentó el usuario Videohome, puede suceder que se pierda a la mitad del proceso la conexión al router, así que como medida preventiva antes de comenzar el proceso recomiendo que se conecten al router con un cable de red y se asignen la IP estática 192.168.1.100 con máscara de red 255.255.255.0, para ver como hacer esto sigan las instrucciones de este post:

Como asignar una IP estática en windows vista

(Próximamente pondremos una versión para Windows XP y para OS X)

1. Entrar al router

Esto lo podemos hacer escribiendo en el navegador: http://192.168.1.254/

2. Modificar el tiempo de concesión (lease time)

Infinitum Thomson XBOX paso 1

Infinitum Thomson XBOX paso 1

Una vez en la pantalla de administración del router hacemos click en…

  1. Red doméstica
  2. Interfaces
  3. LocalNetwork

A continuación hacer click en:

Infinitum Thomson XBOX paso 2

Infinitum Thomson XBOX paso 2

  1. Configurar
  2. Desactivar la casilla de “Usar el servidor de DHCP”
  3. Hacemos click en “Aplicar”
  4. Hacemos click en “Editar”, en la primera y única entrada de Grupos DHCP

Esto nos llevará a la siguiente pantalla:

Infinitum Thomson XBOX paso 3

Infinitum Thomson XBOX paso 3

  1. Cambiar el tiempo de concesión de 0(cero) días a 1 día.
  2. Aplicar

Ahora regresamos a la pantalla anterior y aquí debemos de volver a activar el DHCP, ¡esto es muy importante!

3. Agregar reglas al firewall (”CORTAFUEGOS” jajaja) para la XBOX

Ya para terminar lo único que tenemos que hacer es agregar unas reglas para que el firewall permita el paso del tráfico de LIVE hacia la XBOX, para hacer esto debemos de hacer click en:


Infinitum Thomson XBOX paso 4

Infinitum Thomson XBOX paso 4

  1. Dispositivos
  2. Seleccionar la XBOX de la lista de dispositivos, es muy probable que tu XBOX no diga XBOX360 en la lista de dispositivos sino su dirección MAC (una serie de números y letras que parece no tener sentido), pero te puedes guiar por la interfaz para reconocerla (si está conectada por cable o por un medio inalámbrico) así como por la misma dirección MAC, normalmente las computadoras tienen su nombre escrito y en este caso la XBOX no tendrá ningún nombre sino una dirección MAC.

Al seleccionar nuestra XBOX iremos a la pantalla en la que agregaremos las reglas para la XBOX:

Infinitum Thomson XBOX paso 5

Infinitum Thomson XBOX paso 5

  1. Seleccionamos la regla que dice XBOX Live
  2. Damos click en Agregar

¡Y listo!

Nota final: Varios usuarios han tenido problemas aún con la NAT estricta después de hacer todo el tutorial pero se les ha solucionado al cambiar la IP de la XBOX a Automático. Ojalá les ayude esto en caso de que sigan sin poder conectarse! Y también si pueden, síganme y déjenme seguirlos en twitter! Mi twitter es: http://twitter.com/mondras

Ya con esto podrás conectarte sin problemas al servicio LIVE detrás de este modelo de router.

¡Cualquier duda dejen un comentario!