#0 

27-10-2008 20:13:18

johnplayer
Habitué
Date d'inscription: 30-09-2007
Messages: 431

Voila, je cherche à sauvegarder les données de mon jeu et j'ai pensé à la sérialisation d'une classe. Je créé une classe sauvegarde ou j'y mets mes variables pour les utiliser dans mon jeu. Mais je ne sais pas comment çà marche, enfin disons plutôt que je n'ai pas compris les tutos que j'ai trouvé.


core i7 4970K @ 4GHz - 32GB ddr3 19200(2400MHz) - ssd samsung 840 evo 250GB - GTX1080Ti (4K) - Cooler master storm stryker blanc.
"L'alcool, c'est comme Activia, c'est actif à l'intérieur et ça se voit à l'extérieur."

Hors ligne


#1 

27-10-2008 21:09:17

ramis
Membre
Date d'inscription: 27-10-2008
Messages: 92

Je pense qu'il faut que tu utilise une autre librairie permettant d'enregistrer dans un fichier :
-les coordonnées de chaque élement ,que tu prends avec node->getPosition()
-les variables (point de vie , mana , etc )

puis tu recharge ta scène comme elle était à partir des variables de ton fichier :
-coordonnées avec node->setPosition(positions enregistrées)
-variables

(essaie peut-être d'utiliser #include <stdlib.h>/#include <stdio.h> ? je crois qu'ils ont des fonctions de manipulation de fichier) .

Hors ligne


#2 

28-10-2008 17:04:18

Aranoth
Abonné
Lieu: Toulouse
Date d'inscription: 25-09-2006
Messages: 242
Site web

C'est pas bien compliqué en C++, surtout en surchargeant les opérateurs de flux
Au pire, boost::serialize wink

(essaie peut-être d'utiliser #include <stdlib.h>/#include <stdio.h> ? je crois qu'ils ont des fonctions de manipulation de fichier) .


C'est des en-têtes de C ça. Ça n'a plus sa place en C++.
fstream permet de manipuler les fichiers de façon plus simple et bien plus sure.

Hors ligne


#3 

28-10-2008 18:19:56

tmyke
Administrateur
Date d'inscription: 24-03-2008
Messages: 1025

johnplayer :

Voila, je cherche à sauvegarder les données de mon jeu et j'ai pensé à la sérialisation d'une classe. Je créé une classe sauvegarde ou j'y mets mes variables pour les utiliser dans mon jeu. Mais je ne sais pas comment çà marche, enfin disons plutôt que je n'ai pas compris les tutos que j'ai trouvé.


Quels sont les parties que tu n'as pas comprises. Suis pas un pro dans la serialization d'Irrlicht, mais bon, voici un petit code
tout simple:

Code:

    //on créé un MeshSceneNode
    scene::ImeshSceneNode *mmodel = scenegraph->addMeshSceneNode(model, scenegraph->getRootSceneNode());
    mmodel->setPosition( vector3df(0,5,0)); // une postion au pif
    

    // on passe à notre serialization
    io::IAttributes *attribs = device->getFileSystem()->createEmptyAttributes();
    mmodel->serializeAttributes(attribs);
    // par exemple on intéroge sur  une valeur précise
    vector3df info = attribs->getAttributeAsVector3d( "Position");
    // sortie du résultat dans la console, ici 5 normalement
    printf("result %f \n", info.Y);
    // si on veut, on sauvegarde la serialization dans un fichier xml
    io::IXMLWriter *writer = device->getFileSystem()->createXMLWriter("sauve_mesh_node.xml");
    attribs->write(writer);

bon c'est très basic, mais cela peut aider et être un début pour comprendre.


Force et sagesse...

Hors ligne


#4 

29-10-2008 12:16:59

johnplayer
Habitué
Date d'inscription: 30-09-2007
Messages: 431

Ouais, disons que je voulais éviter le xml mais bon.
Comment nommer les attributs comme <attributes> dans cet exemple :

<?xml version="1.0" ?>
- <attributes>
  <int name="essai1" value="10" />
  <int name="essai2" value="56" />
  </attributes>

Dernière modification par johnplayer (29-10-2008 12:20:47)


core i7 4970K @ 4GHz - 32GB ddr3 19200(2400MHz) - ssd samsung 840 evo 250GB - GTX1080Ti (4K) - Cooler master storm stryker blanc.
"L'alcool, c'est comme Activia, c'est actif à l'intérieur et ça se voit à l'extérieur."

Hors ligne


#5 

29-10-2008 14:14:48

tmyke
Administrateur
Date d'inscription: 24-03-2008
Messages: 1025

Je ne suis pas sur que tu puisses. Enfin bon, moi perso j'ai pas trouvé, du moins à partir des fonctions 'Attribes'.
Par contre, ce que tu peux faire, c'est avant de passer à ton fichier XML tes 'attributes', tu envoie au fichier XML une ligne avec une instruction
writer->writeElement(L"mon mesh", false, etc...);  (ou writer le io::IXMLWriter *writer du code ci dessus) qui te permet d'écrire directement dans ton fichier et de taguer les parties que tu souhaites.

et la tu devrais avoir:


<?xml version="1.0" ?>
<mon mesh>
- <attributes>
  <int name="essai1" value="10" />
  <int name="essai2" value="56" />
  </attributes>


A tester...


Force et sagesse...

Hors ligne


#6 

29-10-2008 16:06:16

johnplayer
Habitué
Date d'inscription: 30-09-2007
Messages: 431

J'ai installé IrrXml pour les extensions mais je n'arrive pas à récupérer les données que j'ai sauvegardées.

Code:

void Profils::chargement()
{
    // ouverture du fichier s'il existe (celui cité plus haut dans les posts)
    if (!fileSys->existFile("../Profils/Save.xml"))
        reader =  createIrrXMLReader("../Profils/Save.xml"); 
    else
        return;
    // lecture du fichier et affectation des variables
                while(reader && reader->read())
    {
        if (!strcmp("int", reader->getNodeName()))
        {
            if("essai1" == reader->getAttributeValue("name"))
            {
                essai1 = reader->getAttributeValueAsInt("value");
            }
        }

    }
        // décharge le fichier
        delete reader;
}

core i7 4970K @ 4GHz - 32GB ddr3 19200(2400MHz) - ssd samsung 840 evo 250GB - GTX1080Ti (4K) - Cooler master storm stryker blanc.
"L'alcool, c'est comme Activia, c'est actif à l'intérieur et ça se voit à l'extérieur."

Hors ligne


#7 

29-10-2008 17:46:54

tmyke
Administrateur
Date d'inscription: 24-03-2008
Messages: 1025

Là je tire ma révérence, tous ce qui est gestion des fichiers XML et leur emploie, c'est pas encore mon truc, plus qu'à espérer qu'une âme éclairée passe pour te fournir quelques explications .
wink


Force et sagesse...

Hors ligne


#8 

29-10-2008 17:56:48

Aranoth
Abonné
Lieu: Toulouse
Date d'inscription: 25-09-2006
Messages: 242
Site web

Oula, ça fait un bail que j'ai fait ma classe utilitaire par dessus irrXML et que je n'y ai plus touché...

Mais je vois que ton code n'est pas tout à fait le même que celui de la doc :
http://www.ambiera.com/irrxml/docu/index.html

Si j'ai le temps un de ces 4 j'uploaderai ma classe utilitaire

Hors ligne


#9 

29-10-2008 18:10:45

johnplayer
Habitué
Date d'inscription: 30-09-2007
Messages: 431

Ca y est j'ai trouvé, en fait je n'ai pas de drop apres avoir fini d'ecrire mon fichier donc je ne pouvais pas le lire.
voila du code :

Code:

void Profils::sauvegarde()
{
    // on assigne des valers de test //
    essai1 = 10; essai2 = 56;
    // création et enregistrement du fichier
    writer = fileSys->createXMLWriter("../Profils/Save.xml");
    writer->writeXMLHeader();
    writer->writeElement(L"integer", false);// ouverture première balise
                writer->writeLineBreak(); // on va à la ligne
    writer->writeElement(L"essai1", true, L"valeur", L"10"); // ecriture d'une données
                writer->writeLineBreak(); // on va à la ligne
    writer->writeElement(L"integer", true); // fermeture première balise
                writer->writeLineBreak(); // on va à la ligne
    writer->drop(); // on libere le fichier
}

void Profils::chargement()
{
    // ouverture du fichier s'il existe
    if (fileSys->existFile("../Profils/Save.xml"))
        reader =  fileSys->createXMLReader("../Profils/Save.xml"); 
    else
        return;
    // lecture du fichier et affectation des variables
    while(reader && reader->read())
    {
        switch(reader->getNodeType())
        {    
                case EXN_ELEMENT:
                    {
                        if (stringw("essai1") == reader->getNodeName())
                            name = reader->getAttributeValue(L"valeur");
                    }            
                    break;        
        }    
    }
    reader->drop(); // on libere le fichier

}

core i7 4970K @ 4GHz - 32GB ddr3 19200(2400MHz) - ssd samsung 840 evo 250GB - GTX1080Ti (4K) - Cooler master storm stryker blanc.
"L'alcool, c'est comme Activia, c'est actif à l'intérieur et ça se voit à l'extérieur."

Hors ligne


Options Liens officiels Caractéristiques Statistiques Communauté
Corrections
irrlicht
irrklang
irredit
irrxml
xhtml 1.0
css 2.1
Propulsé par FluxBB
Traduit par FluxBB.fr
883 membres
1429 sujets
11121 messages
Dernier membre inscrit: Saidov17
145 invités en ligne
Aucun membre connecté
RSS Feed