J'ai récemment fait un clone de base de Space Invaders, en C ++, en utilisant le framework Allegro 5. Après avoir terminé, j'ai réalisé que j'avais environ 10 sprites et 13 Mo de DLL; certains joueurs n'avaient même pas les DLL mingW, ce qui rendait le jeu très déroutant.
Comment puis-je regrouper toutes mes ressources de manière à pouvoir facilement ajouter et supprimer des données à mon jeu, et pour réduire la taille prise par la ressource, en les plaçant essentiellement au même endroit? J'utilise des blocs de code.
zziplib
pour stocker tous mes actifs habituels dans un fichier zip, puis les charger dans mon jeu via un pipeline de contenu personnalisé pour le moteur. Ce que vous recherchez au départ, c'est un moyen de charger des fichiers à partir d'un fichier zip dans la mémoire pour pouvoir les utiliser dans votre jeu. En ce qui concerne les DLL, c'est assez difficile car elles doivent généralement être dans le même répertoire que l'exécutable ou le répertoireWindows
ouSystem32
qui n'est PAS recommandé! Que diriez-vous d'une archive SFX à extraireTEMP
et à exécuter à partir de là?Réponses:
Il semble que vous soyez confronté à deux défis: la distribution et le conditionnement des actifs.
Distribution
Emballez votre application entière dans des répertoires comme bon vous semble, puis placez le répertoire de niveau supérieur dans un fichier .zip. Distribuez ce fichier .zip. Lorsque vos utilisateurs extraient le zip, ils auront un dossier avec tout ce dont ils ont besoin prêt à exécuter le jeu.
Comment placez-vous vos fichiers?
Je fais habituellement quelque chose comme ça:
Conditionnement des actifs
Vous pouvez utiliser une sorte de bibliothèque de compression (zlib, lzo) pour compresser toutes vos ressources de jeu (le répertoire res \ ci-dessus) dans un seul fichier. Ensuite, vous devez utiliser la même bibliothèque de compression pour extraire le contenu de vos ressources, en temps réel, afin de charger vos ressources dans votre jeu.
Que se passe-t-il alors lorsque vous souhaitez patcher vos actifs? Ensuite, vous devez soit: compiler un tout nouveau fichier d'actifs et le distribuer à vos utilisateurs (afin qu'ils téléchargent essentiellement ce qu'ils ont déjà, plus la poignée d'ajouts), ou vous devez créer un programme de mise à jour (un autre programme à maintenir ) et gérer le fait que les choses peuvent mal tourner et que votre fichier d'actif sera corrompu ...
Honnêtement, ce n'est pas vraiment trivial de faire fonctionner ça et je ne vois pas le résultat dans votre situation. Un simple répertoire devrait suffire pour encapsuler vos 10 sprites et il est beaucoup plus facile d'ajouter et de patcher des choses: il suffit de les télécharger dans le bon répertoire et c'est fait.
Construire un installateur
Cela suppose que vous ciblez Windows ... une fois que vous avez ci-dessus, vous pouvez travailler à la création d'un programme d'installation pour votre jeu. J'éviterais à tout prix les méthodes ClickOnce prises en charge par Visual Studio. Ce n'est pas votre programme d'installation Windows typique et est livré avec son propre ensemble de bizarreries.
Jetez un œil à cette question sur StackOverflow - elle contient un ensemble de liens utiles vers les packages d'installation que vous pouvez utiliser. De nos jours, beaucoup de gens semblent aimer WiX . Je ne l'ai jamais utilisé moi-même. De plus, AdvancedInstaller et InnoSetup sont tous deux des choix populaires.
la source
Vous pourrez peut-être lier statiquement certaines bibliothèques au lieu d'inclure les DLL. Si et comment est différent pour chaque bibliothèque.
la source
Vous pouvez utiliser un logiciel comme Enigma pour emballer vos fichiers et les enregistrer dans un seul .dat. Vous devrez changer le dossier de votre lanceur.
la source