Ouf, tu me rassures.
Jelb: c'est le seul jeu que je connais où il faut 3 minutes de temps de chargement pour afficher la liste des sauvegardes.
Haha . Nan c'était un projet etudiant. Mais du coup est-ce que dans certains projets ça peut valoir le coup de mettre les deux en place ou c'est overkill ?
Sérialisation
-XML (ou json) pour le dev
-binaire pour le mode release (ça complique aussi la triche dans le cas d'un jeu)
Enfait je cherche le moyen le plus simple (dans l'implémentation) de faire un système de sauvegarde. Je note que sérialiser l'objet racine est une mauvaise idée
Pour le choix du binaire, c'est juste par simplicité. Mais maintenant que je vais devoir gérer ça plus ou moins à la main, la finalité (xml ou binaire) revient au même en terme de travail je pense.
Tes arguments sur le fait d'utiliser le xml sont intéressants (surtout pendant le debug), je vais peut-être partir là dessus. Maintenant c'est un petit jeu perso pour le plaisir donc si un jour des gens lancent le jeu et veulent tricher...
Merci pour les conseils !
Je vois pas trop l'intérêt du binaire. Ça permet d'économiser de la place, mais c'est rarement un problème pour les sauvegardes de jeu.
Si tu veux éviter les script kiddies qui trichent, t'as qu'à gzipper le JSON puis tu modifies le magic number de l'en-tête pour éviter que ce soit ouvrable facilement.
Rust fanboy
C'est souvent un problème pour les sauvegardes de jeu avec un peu de state.
Binaire ou texte, ça ne change rien, il faut du code qui passe un peu partout opur dire sauve moi ça comme un u32, sauve-moi ça comme une string, et tutti quanti. Si le framework est bien fait, ils seront interchangeables. Et convertibles.
Le seul intérêt du texte, c'est le diff et le patching, à mon sens.
Et toujours penser à truffer de numéros de versions pour la backward compat, à bumper quand quelque chose change.
Sleeping all day, sitting up all night
Poncing fags that's all right
We're on the dole and we're proud of it
We're ready for 5 More Years
D'ailleurs si je pars en xml ou json. Il y aurait une façon élégante de coder ça ? Parce là, à mon niveau, je pense écrire sur chaque objet une fonction save/load en gros.
Hum comme me la suggéré Tomaka17, je vais créer un objet intermédiaire pour stocker plus facilement les données à sauvegarder avant de les écrire.
C'est pas élégant mais fonctionnel et ça répond à un principe : pars du cas particulier et va vers le général plutôt qu'essayer tout de suite de faire une usine à gaz.
Exo : vérifie comment ton système marche quand tu ajoutes, enlèves et change le type d'une variable.
Sleeping all day, sitting up all night
Poncing fags that's all right
We're on the dole and we're proud of it
We're ready for 5 More Years
Pour les liens entre objets, il te faudra une notion de handle.
Sleeping all day, sitting up all night
Poncing fags that's all right
We're on the dole and we're proud of it
We're ready for 5 More Years
Rust fanboy
Rust fanboy
Sur les sauvegardes des jeux qui demandent beaucoup de data (je pense notamment aux rpgs genre Elder Scroll), ça marche comment d'ailleurs ? Parce que vu la quantité de coffres/portes/objets qui peuvent être ouverts/déplacés/plein/vides, les sauvegardes doivent peser une tonne au bout d'un moment, non ?
Souvent ce genre de jeux encode le delta entre l'état pristine et l'état courant.
Souci : les sauvegardes deviennent de plus en plus grosses et lentes au fur et à mesure que tu joues.
Deux écoles, soit tu vises le worst case, soit tu souhaites améliorer le cas moyen.
Sleeping all day, sitting up all night
Poncing fags that's all right
We're on the dole and we're proud of it
We're ready for 5 More Years
A noter que la plupart du temps, les coffres "peu important" n'ont pas d'état sauvegarder, par exemple, seul les coffres de loot de boss vont être liés au statut du donjon (fini ou pas). Bref, il y a plein d'astuces, d'ailleurs je conseil les articles sur gamasutra, il y a pas mal d'idées concernant ce genre de choses. (J'avais lu par exemple un article expliquant comment faire du rewind et des savestate assez facilement en suivant un pattern bien défini)
Et à part ça, oui parfois les sauvegardes de jeu font jusqu'à plusieurs dizaines voire plus d'une centaine de Mo.
Rust fanboy
Un bout de papier et un crayon pour noter le code ?
Ce qu'il faut savoir, c'est qu'on ment beaucoup aux minmatars, surtout lorsqu'ils posent des questions du style: "t'es sûr que ça vole, ce truc ?" Cooking Momo, le 30/08/09
La programmation est une course entre le développeur, qui s’efforce de produire des applications à l’épreuve des imbéciles, et l’univers qui s’efforce de produire de meilleurs imbéciles... L’univers a une bonne longueur d’avance !!!
Ce qu'il faut savoir, c'est qu'on ment beaucoup aux minmatars, surtout lorsqu'ils posent des questions du style: "t'es sûr que ça vole, ce truc ?" Cooking Momo, le 30/08/09
Vous utilisez quoi comme paramètres sur votre compilateur (c++) pendant le développement (sans parler d'opti). Au niveau des warnings, bonnes pratiques, etc ?
Niveau 3 sur msvc avec des pragma pour ignorer les trucs les plus relous.
Mais ceux de gcc et clang sont vraiment mieux foutus.
Essaie de compiler ton projet avec plusieurs compilos, de passer des outils d'analyse statique, c'est toujours positif !
Sleeping all day, sitting up all night
Poncing fags that's all right
We're on the dole and we're proud of it
We're ready for 5 More Years
En outil d'analyse statique vous pensez à quoi ? Statique c'est que ça analyse uniquement le code source, pas pendant l'exécution ?