#1 

27-10-2008 19:13:18

johnplayer
Membres
Avatar de johnplayer
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


#2 

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


#3 

28-10-2008 16:04:18

Aranoth
Membres
Avatar de Aranoth
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 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


#4 

28-10-2008 17:19:56

tmyke
Administrateurs
Avatar de tmyke
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


#5 

29-10-2008 11:16:59

johnplayer
Membres
Avatar de johnplayer
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


#6 

29-10-2008 13:14:48

tmyke
Administrateurs
Avatar de tmyke
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


#7 

29-10-2008 15:06:16

johnplayer
Membres
Avatar de johnplayer
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


#8 

29-10-2008 16:46:54

tmyke
Administrateurs
Avatar de tmyke
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 .
wink


Force et sagesse...

Hors ligne


#9 

29-10-2008 16:56:48

Aranoth
Membres
Avatar de Aranoth
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


#10 

29-10-2008 17:10:45

johnplayer
Membres
Avatar de johnplayer
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


Options Liens officiels Caractéristiques Statistiques Communauté
Préférences cookies
Corrections
irrlicht
irrklang
irredit
irrxml
Propulsé par Django
xhtml 1.0
css 2.1
884 membres
1440 sujets
11337 messages
Dernier membre inscrit: Saidov17
153 invités en ligne
membre en ligne: -
RSS Feed