Je développe un jeu comme Age of empire (bâtiments sur la carte) et pour chaque bâtiment, j'ai une feuille de sprite pour son animation. J'utilise l'animation image par image pour animer le bâtiment (je ne connais pas d'autre méthode de toute façon). Je remarque que mon dossier de ressources devient extrêmement volumineux en raison des images que je mets dedans.
Comment des jeux comme CoC et Age of Empires gardent-ils leur taille apk inférieure à 50 mg? Suis-je en train de manquer quelque chose en ce qui concerne le développement de jeux
Je vous remercie
EDIT: Plus d'informations sur le problème auquel je suis confronté
J'ai BEAUCOUP d'animations d'objets dessinables. J'ai choisi cette voie parce que c'était la plus rapide et qu'elle donnait les résultats que je voulais. Fondamentalement, chaque bâtiment est une animation dessinable dans laquelle son fichier xml fait référence à 8 dessins (8 images = 8 fichiers). Tous sont au format PNG en raison de la transparence. Puisque j'ai plus de 200 images, la taille de l'apk est de 120 Mo (et je n'ai pas encore fini de copier la moitié des fichiers). C'est ce qui invite, il doit y avoir un moyen de le résoudre. Veuillez aider un collègue développeur
Réponses:
Votre question ne permet pas de savoir si vous voulez vraiment connaître les techniques qui permettent aux jeux d'économiser de l'espace disque même lorsque vous avez de grandes quantités de fichiers images / ressources lourds (c'est ce qui est dans le corps de la question), ou si vous voulez juste savoir si il y a moins de façons gourmandes en espace disque de faire de l'animation pour vos bâtiments (c'est ce que sous-entend le titre de votre question).
Donc, je vais mettre cette réponse ici en essayant d'être utile pour économiser de l'espace lorsque vous avez beaucoup d'images. Si vous souhaitez uniquement connaître les techniques d'animation qui pourraient vous permettre d'économiser de l'espace disque, veuillez me le faire savoir, je pourrais supprimer la réponse.
Cela dit, dans une situation similaire, deux solutions que j'ai vues (et utilisées une fois) en termes d'économie d'espace sur le disque étaient:
1) pour concaténer des images individuelles au sein d'une même image. Parfois, cela peut être utile. Donc, au lieu d'enregistrer 4 fichiers distincts pour chacun des carrés de couleur suivants, je les enregistre côte à côte dans la même image (et je ne les divise que via le code du jeu):
Dans cet exemple, l'enregistrement de chacun dans 4 fichiers PNG différents équivaut à 1255 octets, tandis que le fichier unique avec tous les éléments concaténés fait 451 octets. Bien sûr, combien cela pourrait aider au cas par cas et vous devriez tester pour voir si cela peut vous être utile en fonction de vos images.
2) pour compresser le dossier des ressources. Cela peut souvent être très utile pour économiser de l'espace disque. Ensuite, lorsque le jeu est en cours, vous décompressez ou tirez l'image souhaitée du fichier compressé - selon le format de compression que vous utilisez. Voir cette réponse passée qui est devenue un wiki de ce site: /gamedev//a/37649/72423
Mais gardez également à l'esprit que chaque type de compression peut être plus ou moins avantageux selon le type de fichier image que vous utilisez : Évitez la double compression des ressources
Pour plus de détails sur la compression: état de l'art en compression d'image?
Enfin, vous pourriez également être intéressé à réfléchir aux types d'images à utiliser pour chaque situation: Quel format d'image est plus économe en mémoire: PNG, JPEG ou GIF?
la source
Je vous propose d'essayer TexturePacker
Utilisez-vous un framework de développement de jeux comme AndEngine, Cocos2d-x ou LibGdx? => Aucun
Avez-vous besoin de toutes vos images chargées en même temps? Il semble que vous rencontrerez d'énormes problèmes de RAM sur les appareils cibles.
Mise à jour: Snake m'a envoyé des images. Comme promis, ils ne seront pas rendus publics ici, j'ai donc créé moi-même de l'art pour montrer comment réduire l'utilisation de la mémoire.
Dans l'image d'origine, seule une partie de l'image se déplaçait. J'ai placé un oiseau sur une maison pour le démontrer:
Fondamentalement, l'animation complète dans une feuille est un gros gaspillage de mémoire. Vous devez diviser les parties statiques et mobiles:
Statique:
Anim01:
Anim02:
Gardez la position d'origine de l'oiseau dans les images . C'est pourquoi il y a tellement d'espace vide au-dessus. Vous en avez besoin pour aligner l'animation.
Faites maintenant glisser les images sur TexturePacker et sélectionnez les paramètres suivants
Le résultat est que vous obtenez maintenant 2 fichiers: la feuille de sprite et un fichier de description JSON.
Les parties importantes sont frame et spriteSourceSize .
Le cadre vous donne l'emplacement du sprite d'origine dans la feuille de sprite.
spriteSourceSize vous donne le décalage pour dessiner l'image - les parties de l'image qui sont laissées de côté à cause du découpage:
Une routine de dessin de pseudo-code simple ressemble à ceci:
Vous devrez peut-être ajuster le calcul du décalage en fonction du point de pivot / origine dans votre système graphique. La routine ci-dessus suppose un système de coordonnées dont l'origine est en haut à gauche.
Puis dessinez simplement la maison en 2 passes:
Vous n'avez pas à vous soucier des décalages - car les images sont déjà alignées.
la source
Voici quelques pointeurs que vous pouvez utiliser
J'espère que ces pointeurs vous aideront
PS Je ne donne qu'une idée généralisée car je ne connais pas le contenu exact de votre jeu et vos excuses si ces pointeurs ne sont pas utiles
la source
De nombreux jeux ne conservent pas leurs ressources graphiques dans le .apk; ils n'incluent que les "bases" comme les graphiques de l'interface utilisateur et le code du jeu et téléchargent le reste des ressources une fois le jeu installé. Cela est particulièrement vrai pour les jeux qui utilisent différentes ressources graphiques en fonction de la résolution de votre écran pour éviter que le .apk contienne à la fois des ressources basse et haute résolution.
Vous devriez regarder à la fois les options d'optimisation fournies par les autres répondeurs, ainsi que si vous devrez finalement servir les graphiques de votre jeu séparément du .apk lui-même.
la source
Je suis venu sur ce site à la recherche d'une question similaire et il y a en effet quelques bonnes ressources pointées à la fois dans les réponses à votre question et dans d'autres questions.
Vous devriez probablement jeter un œil à l'animation 2D: des modèles 3D animés ou des sprites avec des cadres d'animation? pour un débat sur différents types d'animation. Cela m'a aidé à optimiser mon jeu. De plus, vous ne nous dites pas quelle API vous utilisez ni quel moteur vous utilisez. Cela seul peut faire toute la différence: animation PNG image par image Android
En plus de cela, gardez à l'esprit que si vous suivez la voie de compression, il peut y avoir des différences importantes entre la façon dont vous compressez. Plus précisément, il existe quelques différences entre les types de compression et il existe un débat spécialisé sur la voie la plus appropriée pour les appareils mobiles. Surtout si vous tenez compte du fait que pour les mobiles, l'utilisation de la RAM et les pertes de CPU pour le chargement sont également primordiales. Voir: http://www.gamasutra.com/blogs/AlexandruVoica/20130419/190833/Why_efficiency_is_key_in_texture_compression_standards_for_mobile_graphics.php?print=1
la source