27-10-2008 19:13:18
- johnplayer
- Membres

- Date d'inscription:
- Messages: 431
- IP: 83.198.224.227
- Courriel
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
27-10-2008 20:09:17
- ramis
- Membres
- Date d'inscription:
- Messages: 92
- IP: 92.133.210.161
- Courriel
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
28-10-2008 16:04:18
- Aranoth
- Membres

- Date d'inscription:
- Messages: 242
- IP: 90.30.161.224
- Courriel Site web
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
28-10-2008 17:19:56
- tmyke
- Administrateurs

- Date d'inscription:
- Messages: 1025
- IP: 86.218.191.19
- Courriel
johnplayer Ecris:
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 \
", 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
29-10-2008 11:16:59
- johnplayer
- Membres

- Date d'inscription:
- Messages: 431
- IP: 83.192.88.175
- Courriel
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>
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
29-10-2008 13:14:48
- tmyke
- Administrateurs

- Date d'inscription:
- Messages: 1025
- IP: 86.218.252.2
- Courriel
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
29-10-2008 15:06:16
- johnplayer
- Membres

- Date d'inscription:
- Messages: 431
- IP: 83.192.81.195
- Courriel
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;
}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
29-10-2008 16:46:54
- tmyke
- Administrateurs

- Date d'inscription:
- Messages: 1025
- IP: 86.218.183.9
- Courriel
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 .![]()
Force et sagesse...
Hors ligne
29-10-2008 16:56:48
- Aranoth
- Membres

- Date d'inscription:
- Messages: 242
- IP: 90.38.25.6
- Courriel 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
29-10-2008 17:10:45
- johnplayer
- Membres

- Date d'inscription:
- Messages: 431
- IP: 83.192.81.195
- Courriel
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
}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



