Je viens de terminer un jeu de base RPG écrit en C ++ SFML, je me suis beaucoup investi dans le jeu et je voudrais le distribuer, mais j'ai rencontré un petit problème.
Le problème, c’est que j’ai bien plus de 200 images et fichiers cartographiques (c’est-à-dire des fichiers .txt qui contiennent des codes de carte), le tout dans le même dossier que l’exécutable; tant de ressources, je n'ai jamais vu un jeu qui vous montre toutes les ressources directement, je crois plutôt qu'elles regroupent les ressources dans un certain fichier.
Eh bien, c’est ce que j’essaie d’obtenir: j’espère pouvoir regrouper toutes les images dans un fichier (peut-être aussi les fichiers .txt), puis pouvoir les lire ou les ajouter facilement.
c++
assets
sfml
spritesheet
Bugster
la source
la source
Réponses:
Les programmeurs de jeux ont utilisé l'une des deux méthodes principales de stockage de données:
L'inconvénient de la première solution est le problème de l'espace disque gaspillé, ainsi que celui des installations plus lentes.
La deuxième solution offre ses propres pièges. Premièrement, vous devez écrire votre propre image / son / etc. des routines de chargement utilisant une API personnalisée pour accéder aux données archivées. Un autre inconvénient est que vous devez d'abord créer votre propre utilitaire d'archivage pour créer les archives.
TAR / GZ risque de ne pas être une très bonne idée, car vous ne pouvez pas extraire des fichiers spécifiques car vous en avez besoin. C'est la raison pour laquelle de nombreux jeux utilisent les archives ZIP, ce qui vous permet d'extraire des fichiers individuels à votre guise (un bon exemple est Quake 3, dont les fichiers PK3 ne sont rien d'autre que des fichiers ZIP avec une extension différente).
EDIT: "Cacher" la structure des dossiers du jeu et "Ne garder" que les exécutables
EDIT: Gamedev Tuts Plus a une belle ressource
EDIT: libarchive
Une solution potentielle libarchive, qui est une bibliothèque d'archivage qui gérera l'extraction de fichiers à partir d'une archive telle qu'un fichier ZIP. Il vous permet même d’affecter le fichier extrait à un pointeur FILE standard, ce qui rendrait l’interface avec toute autre bibliothèque potentiellement plus simple.
EDIT: fichiers au format ZIP avec extension alternative
Ici, j'aime le commentaire de @Joachim Sauer
la source
.tar
par exemple). Cela concerne la manière dont les données sont physiquement stockées sur le disque.Une autre solution souvent utilisée pour "masquer" les fichiers du jeu est la structure de dossiers. Conservez uniquement vos exécutables et peut-être un fichier Lisez-moi dans le répertoire principal et déplacez les fichiers du jeu dans un sous-dossier "données". Je ne pense pas que ce soit très rare. De nombreux jeux que je connais stockent leur contenu de cette manière.
la source
J'aime beaucoup PhysFS pour ça. Il vous permet d'accéder à des dossiers ou à des archives zip avec le même code. Cela fonctionne bien pour toutes les étapes de la vie des Jeux.
mise à jour:
J'ai utilisé le didacticiel fourni avec le code source et la documentation de doxygen pour apprendre à PhysFS. L'API est vraiment assez simple, vous passerez plus de temps à apprendre à charger des images dans SFML via des mémoires tampons plutôt que par chemin de fichier.
la source
Je suggère d'utiliser un fichier ZIP. C'est un format omniprésent et vous trouverez des bibliothèques prêtes à l'emploi qui vous permettent de charger des fichiers à partir d'un fichier ZIP. Une recherche rapide sur Google a même révélé un chargeur zip pour sfml .
la source
Eh bien, vous pouvez tricher comme ils l'ont mentionné :) Vous pouvez créer une feuille de sprite à partir de l'image, il n'est pas nécessaire de la compresser à moins de gagner du temps, sauf si cela permet d'économiser beaucoup d'espace. Après avoir créé une feuille-objet ou plusieurs feuilles-image à partir des images, vous pouvez simplement renommer leurs extensions. La plupart des joueurs ne prendront pas la peine de vérifier et pourquoi ne pas laisser cette option aux artistes qui voudront peut-être modifier votre jeu à l'avenir? De cette façon, ils peuvent aussi créer une feuille de sprite, renommer son extension et commencer à rouler.
Avec les fichiers texte, je vous suggère humblement de convertir ces données en forme binaire. Je suis sûr que vous trouverez un moyen simple de le faire. Par exemple, si vous utilisez uniquement AZ, az et le 0-9, vous pouvez utiliser 6 bits pour représenter chaque caractère, ce qui protégera quelque peu votre contenu protégé par le droit d'auteur. empêchera également les autres utilisateurs d’éditer des cartes. Vous pouvez toujours ajouter un convertisseur de carte si vous le souhaitez. Zipper est tout à fait raisonnable pour le texte cependant.
la source
Il ne s'agit pas uniquement du nombre de ressources ou de l'espace disque.
Avec beaucoup de fichiers de texture différents, comme vous utilisez SFML, qui rend avec OpenGL, chaque fois que vous allez restituer une texture, OpenGL doit lier la texture suivante à la carte vidéo (vérifiez glBindTexture ()), et une tâche très coûteuse.
Dans cet esprit, vous pouvez comprendre pourquoi les jeux mettent généralement plusieurs images-objets dans la même texture, appelées feuilles-feuilles, en fonction de vos menus / niveaux / cartes du jeu.
Le résultat est un gain de performances énorme, car vous restituez beaucoup d'images-objets avec le même appel à la texture de liaison.
la source
Personnellement, je me dirigerais vers le chemin du fichier binaire personnalisé pour cela. C’est quelque chose que je fais moi-même tout le temps maintenant, ce n’est pas aussi difficile que cela puisse paraître, et cela procure également un niveau d’obscurcissement pour vos fichiers de ressources de jeu. J'ai écrit un petit article d'introduction sur Gamedev à ce sujet il n'y a pas si longtemps, si cela vous intéresse:
http://gamedev.tutsplus.com/tutorials/implementation/create-custom-binary-file-formats-for-your-gour-games-data/
Les feuilles de Sprite sont un sujet totalement différent, mais elles sont la norme pour la plupart des jeux :)
la source
Une autre méthode que vous pouvez utiliser:
La version gratuite de XnView fournit une fonctionnalité appelée "
Strip of Images
" (MAJ + A), qui vous permet de créersprite-collections
.Cela minimise l’accès aux fichiers et est particulièrement important pour les applications / jeux Web
HTTP-roundtrips
.L'accès à des images individuelles est ensuite accordé via des cartes de coordonnées (par exemple, définitions css).
la source
Vous devez d’abord écrire votre propre image / son / etc. des routines de chargement utilisant une API personnalisée pour accéder aux données archivées. Un autre inconvénient est que vous devez d'abord créer votre propre utilitaire d'archivage pour créer les archives. TAR / GZ risque de ne pas être une très bonne idée, car vous ne pouvez pas extraire des fichiers spécifiques car vous en avez besoin. C'est la raison pour laquelle de nombreux jeux utilisent les archives ZIP, ce qui vous permet d'extraire des fichiers individuels à votre guise (un bon exemple est Quake 3, dont les fichiers PK3 ne sont rien d'autre que des fichiers ZIP avec une extension différente). http://zpp-library.sourceforge.net/
la source