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é.
Hors ligne
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
C'est pas bien compliqué en C++, surtout en surchargeant les opérateurs de flux
Au pire, boost::serialize
(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
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:
//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.
Hors ligne
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)
Hors ligne
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...
Hors ligne
J'ai installé IrrXml pour les extensions mais je n'arrive pas à récupérer les données que j'ai sauvegardées.
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; }
Hors ligne
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 .
Hors ligne
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
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 :
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 }
Hors ligne
Options | Liens officiels | Caractéristiques | Statistiques | Communauté |
---|---|---|---|---|
Corrections |
|
xhtml 1.0 css 2.1 Propulsé par FluxBB Traduit par FluxBB.fr |
882 membres 1429 sujets 11119 messages |
Dernier membre inscrit: LiseBuisson96 58 invités en ligne Aucun membre connecté RSS Feed |