Accueil - Forum - Bibliothèque de ressources
____

Sauvegarder ses données - Fichier rxdata



Dans le tutorial précédent, on a vu que la classe Game_Character_Custom garde en mémoire des données comme l'apparence du héros. Mais comment garder les données même après avoir quitté le jeu ?

1) Les scripts Scene_Save et Scene_Load

Ces deux scripts ont un parent commun : Scene_File. "Scene File" contient les fenêtres, la mise à jour, l'interactivité ...etc. bref comme une scène habituel. Quand le joueur va décider de charger ou de sauver sa partie, toutes la différences sera là car cela va définir :
- Si on charge les données donc dans "Scene_Load"
- Si on sauvegarde les données "Scene_Save"

Mais où et que sauvegarde t-on ?

Evidemment, on sauvegarde les données dans un fichier, plus précisément dans un fichier rxdata. Dit "données" dit principalement "objets". On sauvegarde des objets et principalement des variables globales "$game_system", "$game_switches" ...etc.

2) Sauvegarder/Charger nos objets dans Scene_Save et Scene_Load

Nous allons voir un module permettant de sauvegarder et charger nos objets : Marshal
- Dans Scene_Save , il suffit de mettre à la fin de la méthode "write_save_data", à la suite des Marshal :

Code RubyMarshal.dump($game_character_custom, file)


Cela permet d'écrire dans le fichier "file" (qui est Save1.rxdata), l'objet "$game_character_custom". Ainsi, tout ses données seront sauvegardées

- Dans Scene_Load , de la même manière dans la méthode "read_save_data", vous mettez :

Code Ruby$game_character_custom = Marshal.load(file)


"$game_character_custom" va reprendre les données enregistrées dans le fichier "file"

3) Faire notre fichier rxdata et ordre des données

On a vu comment ajouter des codes dans des scripts de base, mais maintenant commment faire la même chose mais dans votre script ?

Dans nos exemples, nous allons avoir deux objets à écrire et lire :
- $game_chara
- $game_machin

- Pour écrire avec Marshal.dump, il faut savoir quel est le fichier où nous allons enregistrer les données. pour cela, utilisons "File.open" qui ouvrira un fichier mais le créera automatiquement ci celui n'existe pas (Voir cours sur le Ruby : Fichier)

Code Rubyfilename = "Fichier.rxdata"
file = File.open(filename, "wb")
 # Enregistrement avec Marshal ici.
file.close


Nous allons mettre nos objets :

Code Rubyfilename = "Fichier.rxdata"
file = File.open(filename, "wb")
Marshal.dump($game_chara, file)
Marshal.dump($game_machin, file)
file.close


- Pour lire les valeurs Marshal.load, il faut ouvrir le fichier "Fichier.rxdata" créé mais il faut vérifier préalablement s'il existe. Lire des données dans un fichier inexistant provoquera une erreur.

Code Rubyfilename = "Fichier.rxdata"
if FileTest.exist?(filename)
        file = File.open(filename, "r")
          # Chargement avec Marshal ici.
        file.close
end


Pour le chargement , l'ordre à de l'importante ! Vous devez charger les objets dans le même ordre que vous avez sauvegardé.

Ceci est bon :
Code Ruby$game_chara  = Marshal.load(file)
$game_machin = Marshal.load(file)


Ceci n'est pas bon :
Code Ruby$game_machin = Marshal.load(file)
$game_chara  = Marshal.load(file)


on aura donc :

Code Rubyfilename = "Fichier.rxdata"
if FileTest.exist?(filename)
        file = File.open(filename, "r")
         $game_chara  = Marshal.load(file)
         $game_machin = Marshal.load(file)
        file.close
end


4) Des fonctions RGSS qui remplacent Marshal

Il existe deux fonctions fesant la même chose que Marshal :
- load_data
- save_data

a) load_data

Si le fichier existe (sinon faire la condition), on charge comme avec Marshal.load :

Code Ruby$game_chara  = load_data("Fichier.rxdata")


b) save_data

De la même manière que Marshal.dump, on sauvegarde l'objet dans un fichier :

Code Rubysave_data($game_chara, "Fichier.rxdata")


c) Quelle différence avec Marshal.

En fait, elle peut charger/Sauver des fichiers depuis des archives encryptées, ce qui n'est pas le cas de Marshal.
Informations
Page vue 3816 fois | Auteur : Samarium

RPG Creative version 5 - Libérez votre créativité ! ; Mai 2005 - Mai 2012
0.051s - Optimisé pour une résolution 1024*728 - Tous droits réservés.

Contact - Partenaires - Historique - A propos