Je dois sauvegarder des données de jeu personnalisées. Carte, joueur, etc.
Tous auront des "sous-objets". Par exemple, une carte et une carte auront un "tableau" de tuiles. c'est-à-dire des données hiérarchiques. Espérons que rien n'est binaire.
Quel serait un bon format pour ceux-ci?
Jusqu'ici, j'ai envisagé:
Sérialisation: C’est rapide et facile, mais a tendance à casser lorsque je change de classe :(
XML: Je déteste vraiment analyser cela. Mon cas de test comptait plus de 100 lignes de code et semblait plaire à des tonnes de "travail occupé", même pour un format très simple.
INI: serait vraiment maladroit pour les données hiérarchiques.
Protobuf: Je ne l' ai jamais utilisé, mais lisez, vous devez faire beaucoup de travail manuel et casser si vous changez de classe.
Autres options? C'est pourquoi je suis ici!
Edit: il s'agit de Java.
Edit 2:
J'ai opté pour la "sérialisation binaire contrôlée" (voir ci-dessous).
Avantages:
c'est rapide
il est petit (sur disque) et peut être facilement compressé / décompressé en lecture / écriture.
c'est super facile à lire / écrire à partir de jeux et d'outils.
Je peux décider quoi inclure / exclure de l'objet.
Les objets / données peuvent être imbriqués.
Les inconvénients:
Impossible de l'éditer à la main (comme XML, YAML, etc.)
Ne peut pas facilement lire / modifier avec des scripts
La sérialisation Java par défaut est assez lente / gonflée par rapport aux autres implémentations, mais elle est stable et fonctionne
Réponses:
YAML ou JSON seraient de bonnes options pour afficher des données hiérarchiques . Ils sont beaucoup plus simples et faciles à analyser que XML.
Une autre option serait un processus de sérialisation binaire "contrôlé". Chaque objet écrit son état de manière contrôlée, c'est-à-dire
id Tech 4 (moteur Quake 4 / Doom 3) utilise une telle approche.
la source
Un format binaire bien conçu présente tous les avantages, il est rapide, relativement petit et aussi flexible que vous le créez.
Faire un format binaire n’est lié à aucune règle, ce qui est un avantage considérable, mais ironiquement, c’est en grande partie ce qui a donné un mauvais nom aux structures de fichiers binaires. XML, JSON et autres prennent beaucoup de décisions pour vous. Ils sont loin d'être toujours optimaux, mais ce sont des choix raisonnablement sûrs qui vous aideront généralement à éviter certains problèmes autrement courants.
Identifiez ces problèmes, concevez votre format en fonction de ceux-ci et créez un excellent format binaire.
Si vous n'êtes pas assez expérimenté / suffisamment en confiance pour créer un format binaire et que la quantité de données est suffisamment petite pour que l'impact sur la vitesse soit négligeable, je vous suggère d'utiliser JSON, c'est simple, mais fait le travail.
la source
Le choix du format de fichier dépend énormément de votre ensemble d’outils actuel et du jeu que vous avez l’intention de faire. Ceci étant dit...
Toolset est l’un des facteurs les plus importants pour choisir un format de fichier de jeu. Si vous créez un format binaire , vous devez toujours vous assurer que vous avez les outils pour saisir vos données de jeu. Cela peut être aussi simple qu'un éditeur hexadécimal, ou aussi complexe que Unreal Editor.
Je suppose que le principal avantage de XML, YAML ou de tout autre fichier de langue est que vous pouvez le modifier facilement via un éditeur de texte. Et en utilisant une norme existante, cela garantit que vous ne pouvez pas vous tromper . Mais cela est extrêmement fastidieux lorsque vous avez mille fichiers, ce qui m'amène à mon point suivant.
Jeu. Quel genre de jeu faites-vous? Pourquoi je dis que cela affectera le format du fichier? Parce que, si vous créez quelque chose comme Bomberman 2D, vous pourriez vous en tirer avec un simple fichier texte tel que:
En d'autres termes, optez toujours pour le format le plus évident pour vos données spécifiques . Les jeux de rôle sont le genre de jeu le plus complexe à créer. Ils nécessitent beaucoup de données. Mais cela ne signifie pas que vous devez respecter un format spécifique , binaire ou textuel, pour toutes les données du jeu.
En règle générale, vous souhaitez décrire un texte au format texte et des graphiques au format binaire. Ce qui suit devrait vous donner un exemple:
Pour résumer, il est vivement recommandé que, si possible, vous ne scriptiez pas vos données, sauf en cas d'absolue nécessité . L'utilisateur final ne se soucie pas de la qualité du format, tant que le jeu est jouable, c'est tout ce qui compte.
Cordialement, roy =)
la source
BSON est plutôt sympa. http://bsonspec.org/ . Il est plus facile d'analyser que JSON et de mieux contenir des données binaires, mais il a quand même une belle structure. C'est un peu similaire aux tampons de protocole. L'inconvénient est qu'il semble y avoir beaucoup d'outils en dehors de Mongodb.
EDIT: MsgPack ( http://msgpack.org/ ) est également similaire à BSON et semble gagner du terrain.
la source
Qu'est-il arrivé à votre format de données binaires personnalisé? Si vous avez peur de la sérialisation brute, écrivez votre propre système qui écrit les champs selon vos besoins et les lit. Pas besoin de xml, qui est en effet trop volumineux et complexe pour les situations où vous n'avez pas besoin de la transparence fournie par le format. Définissez simplement un format de fichier bien spécifié et respectez-le, en laissant peut-être de la place pour l’extension de votre ensemble de données dans chaque enregistrement en les complétant avec des valeurs null (supposons que vous ayez un enregistrement de 100 octets maintenant, fixez-le à 150 pour une utilisation future.
Ajoutez un numéro de version et peut-être une somme de contrôle afin de savoir quels champs doivent être renseignés et de vérifier leur validité, et le tour est joué.
la source
Vous pouvez combiner XML ou un autre format avec des insertions Base64 pour certaines données. Pour les champs dont vous avez besoin de lisibilité, vous pouvez utiliser le texte habituel.
la source