Hacred Sall
Gostaria de reagir a esta mensagem? Crie uma conta em poucos cliques ou inicie sessão para continuar.



 
InícioProcurarÚltimas imagensRegistarEntrar

Compartilhe | 
 

 Como funciona um Sistema de Save

Ver o tópico anterior Ver o tópico seguinte Ir para baixo 
AutorMensagem
Bnezinho
Soldado
Soldado
Bnezinho

Peixes Ocupação : Programador

Como funciona um Sistema de Save Empty
MensagemAssunto: Como funciona um Sistema de Save   Como funciona um Sistema de Save Icon_minitimeDom Jul 12, 2009 12:47 am

Classe: Marshal

Muitos almejam saber como funciona um sistema de Save. Na verdade, é bem simples...
Existem no Ruby, duas classes de manipulação de arquivo: A file e a Marshal.
Mas então, qual é a diferença?
A file salva os dados literalmente como você ordena, já a Marshal salva os dados de forma encriptada, evitando assim fraudes.
Obviamente, é bem mais seguro usar a Marshal, e é por isto que estou criando esse tutorial.

Existem dois métodos no Marshal:
Marshal.load e Marshal.dump.
O Marshal.dump salva o valor de uma variável dentro de um arquivo.
Já o Marshal.load agrega a variável tudo o que está contido no arquivo.

Para salvar arquivos:
Código:
Marshal.dump(var, arquivo)
arquivo é uma "gambiarra" para a File_Classe a IO Classe. Sendo sua sintax:
Código:
File.open("diretorio+extensão", "IO")
Existem três tipos de IO:
r: Lê apenas. (Não é o nosso caso)
w: Grava apenas.
a: Grava e lê.

O diretório é formado por:
1. A pasta, com barras /
2. O arquivo
3. A extensão do arquivo (.rvdata, .txt)

Se você quiser salvar na própria pasta do jogo, eliminee o diretório.
Vamos a um exemplo prático. Vamos supor que eu quero salvar o HP do herói no arquivo: HP.rvdata, dentro da pasta Data do projeto. Então, eu usaria...
Código:
hp = $game_party.members[0].hp
arquivo = File.new("Data/HP.rvdata", "w")
Marshal.dump(hp, arquivo)
E é isso que acontece no sistema de save. Todas as variáveis $game (lembrando, as variáveis que agregam valor do jogo, tais como: $game_party, $game_player) são salvas em um único arquivo para que possa ser carregadas posteriormente.

Carregando Arquivos:
Para isso, usamos o Marshal.load.
Possui uma syntax semelhante ao dump, veja:
Código:
Marshal.load(var, arquivo)
Só que de uma maneira inversa. Ao invés de salvar a variável no arquivo, é o arquivo que se agrega a variável.

Vamos a um exemplo prático.
No Scene_Title, por exemplo, se usa o Marshal.load para agregar todos os arquivos no data dentro das variáveis $data.
Vamos ir mais afundo...
Quando você modifica o valor de um Data_Base, o nome do herói por exemplo, esse valor vai direto por arquivo Actors.rvdata. E então, quando iniciamos o jogo, a primeira scene a se inicializar é o Scene_Title, e por isso, eles pegam aquele valor que está dentro da Actors.rvdata e o agrega dentro da $data_actors, que logo sevirá de base para a construção da classe $game_actor, $game_actors e $game_party. Deu pra entender até ai?

Com o sistema de save é um pouco diferente. Todas as variáveis $game são salvas num único arquivo.
Na hora de inicializar o jogo, as variáveis $game zeram novamente, e quando pomos pra carregar, abri-se o arquivo que se salvou e se agrega os antigos valores das variáveis $game à elas.

É por isso que eu digo: Um sistema de save nem é tão dificil assim de se entender, basta estudá-lo à fundo.

Bom pessoal... Espero que tenham gostado da aula, embora um pouco confusa, acho que deu pra entender um pouco da lógica, né? :P
Até mais...
Ir para o topo Ir para baixo
 

Como funciona um Sistema de Save

Ver o tópico anterior Ver o tópico seguinte Ir para o topo 
Página 1 de 1

Permissões neste sub-fórumNão podes responder a tópicos
Hacred Sall :: Centro de Operações :: Armazém :: Scripts :: Ajuda e tutoriais-
Ir para: