Fórum Sharpgames
 
 
  Forum  Criação de Jogo...  Algoritmos  Save Game
Anterior Anterior
 
Próximo Próximo
Nova Entrada 18/3/2009 19:19
  Cloudwsy
31 tópicos
8th Level Poster


Save Game 
Aqui estou eu novamente!
Eu peguei uns códigos exemplos do Alexandre Lobão, que continha um exemplo para se salvar jogo num arquivo XML,
no entanto, ao tentar fazer o código novamente, eu não consigo declarar uma variável o tipo Storage Device.
No exemplo do Lobão está assim:

StorageDevice path = StorageDevice.ShowStorageDeviceGuide(PlayerIndex.One);

mas quando eu faço de novo, o visual studio fala que não existe uma definição para "ShowStorageDeviceGuide".

Bem, quem puder me ajudar, desde já agradeço!
 
Nova Entrada 19/3/2009 2:15
  lucianoJose
195 tópicos
Iniciante


Re: Save Game 
Modificado Por lucianoJose  em 18/3/2009 23:28:04)
 Cloudwsy escreveu
Aqui estou eu novamente!
Eu peguei uns códigos exemplos do Alexandre Lobão, que continha um exemplo para se salvar jogo num arquivo XML,
no entanto, ao tentar fazer o código novamente, eu não consigo declarar uma variável o tipo Storage Device.
No exemplo do Lobão está assim:

StorageDevice path = StorageDevice.ShowStorageDeviceGuide(PlayerIndex.One);

mas quando eu faço de novo, o visual studio fala que não existe uma definição para "ShowStorageDeviceGuide".

Bem, quem puder me ajudar, desde já agradeço!


Olá amigo,

Eu fiz um código simples só pra vc ter idéia de como se faz um Save Game e um Load Game. Dá uma olhada abaixo:
 
[Serializable()]
    public class SaveGame
    {
        public string Name;
 
        public int Age;
    }
 
    ///<summary>
    /// This is the main type for your game
    ///</summary>
    public class Game1 : Microsoft.Xna.Framework.Game
    {
        GraphicsDeviceManager graphics;
        SpriteBatch spriteBatch;
 
        public Game1()
        {
            graphics = new GraphicsDeviceManager(this);
            Content.RootDirectory = "Content";
 
            this.Components.Add(new GamerServicesComponent(this));
        }
 
        protected override void Initialize()
        {
            base.Initialize();
        }
       
        ///<summary>
        /// LoadContent will be called once per game and is the place to load
        /// all of your content.
        ///</summary>
        protected override void LoadContent()
        {
            // Create a new SpriteBatch, which can be used to draw textures.
            spriteBatch = new SpriteBatch(GraphicsDevice);
 
            IAsyncResult result = Guide.BeginShowStorageDeviceSelector(PlayerIndex.One, null, null);
 
            StorageDevice device = Guide.EndShowStorageDeviceSelector(result);
           
            StorageContainer container = device.OpenContainer("StorageDemo");
 
            SaveGame mySave1 = new SaveGame();
            SaveGame mySave2 = new SaveGame();
 
            mySave1.Name = "SharpGames";
            mySave1.Age = 3;
 
            this.Save(mySave1, container);
 
            mySave2 = this.Load(container);
 
            if (mySave2 != null)
            {
                //Sucesso!
            }
        }
 
        public void Save(SaveGame sg, StorageContainer container)
        {
            string filename = Path.Combine(container.Path, "demo.xml");
 
            FileStream stream = File.Open(filename, FileMode.OpenOrCreate);
 
            XmlSerializer serializer = new XmlSerializer(typeof(SaveGame));
            serializer.Serialize(stream, sg);
 
            // Close the file
            stream.Close();
        }
 
        public SaveGame Load(StorageContainer container)
        {
            SaveGame saveGame = new SaveGame();
 
            string filename = Path.Combine(container.Path, "demo.xml");
 
            if (!File.Exists(filename))
            {
                return null;
            }
 
            FileStream stream = File.Open(filename, FileMode.OpenOrCreate, FileAccess.Read);
 
            // Read the data from the file
            XmlSerializer serializer = new XmlSerializer(typeof(SaveGame));
            saveGame = (SaveGame)serializer.Deserialize(stream);
 
            // Close the file
            stream.Close();
 
            return saveGame;
        }
    }


Se vc rodar isso no Windows Vista, e deve salvar automaticamente o arquivo "demo.xml" num caminho parecido com este:

C:\Users\lucianoJose\Documents\SavedGames\StorageDemo\Player1\demo.xml

E o Xml salvo foi este:

<?xmlversion="1.0"?>
<SaveGamexmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:xsd="http://www.w3.org/2001/XMLSchema">
 <Name>SharpGames</Name>
 <Age>3</Age>
</SaveGame>

O legal de usar a API de Storage do XNA é que vc nao vai se preocupar com o target de sua aplicação, seja windows, zune ou xbox360. a maneira de salvar ou ler é a mesma!
 

@lucianoJoseBr My Blog: http://lucjose.wordpress.com
 
Nova Entrada 19/3/2009 12:54
  Cloudwsy
31 tópicos
8th Level Poster


Re: Save Game 
Entendi, muito obrigado!
Foi bastante esclarecedor!
 
Nova Entrada 20/3/2009 14:05
  Cloudwsy
31 tópicos
8th Level Poster


Re: Save Game 
Eu refiz esse código, consegui gerar o arquivo XML mas quando eu coloca pra rodar de novo, da erro ao carregar o arquivo XML.
O Arquivo e o seguinte:


<?xml version="1.0"?>
<stSaveGame xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <PlayerPosition>
    <X>826</X>
    <Y>178.024</Y>
  </PlayerPosition>
  <EnemyPosition>
    <X>505.106445</X>
    <Y>305.27005</Y>
  </EnemyPosition>
</stSaveGame>stSaveGame>

E o Erro que dá é esse:

"InvalidOperationException"
Erro no documento XML (11, 14).
 
Anterior Anterior
 
Próximo Próximo
  Forum  Criação de Jogo...  Algoritmos  Save Game
Logos do XBox 360, XNA e Games For Windows
Copyright 2006-2012 por SharpgamesPolítica de Privacidade  |  Termos de Uso