2011-11-13 4 views
1

Mon jeu cocos2d-iphone a des cartes en mosaïque. Les textures de tilesets sont plutôt grandes. J'ai environ 5 tilesets et chacun est 2048x2048 (rétine).Optimisation des cartes en mosaïque dans cocos2d-iphone

Mes cartes font environ 80x80. Ils ont environ 8 couches et chacun utilise évidemment un tileset.

La fréquence d'images chute (elle va parfois autour de 30. Je sais que 30 est plutôt acceptable, mais je veux quand même 50+). Donc, étant donné que les textures sont énormes, je ne peux pas me permettre de faire beaucoup de couches (puisque chacune en charge une texture).

Alors, que dirais-je de diviser mes textures de tileset en beaucoup plus petits tilesets (comme 1024x1024 chacun)? Cela me permettra d'utiliser beaucoup plus de couches pour mes cartes, non? Y at-il d'autres conseils pour d'énormes cartes de carreaux d'affichage de la rétine?

Répondre

3

La texture avec 2048x2048 et les couleurs 32 bits équivaut à 16 Mo (!) De mémoire. Cinq fois c'est 80 Mo de mémoire juste pour les textures. Aie! Pour un tilemap relativement petit (80x80), c'est une énorme quantité de mémoire de texture.

Le premier ordre d'optimisation serait d'utiliser des textures PVR si vous ne pouvez vraiment pas réduire le nombre de tilesets ou d'images qu'elles contiennent. Vous perdez de la qualité d'image mais la consommation de mémoire diminue considérablement et les performances de rendu des textures PVR sont bien meilleures. Bien sûr, lorsque vous travaillez avec Tiled, vous devez utiliser la (probablement) texture PNG que vous convertissez ensuite en PVR pour une utilisation dans le projet, par exemple en utilisant TexturePacker. 8 couches de tuiles peuvent être assez lourdes, mais cela dépend de la façon dont vous les utilisez et combien de tuiles de chaque couche sont réellement dessinées. Essayez ceci: mettez tous les calques sauf un à visible = NON. Puis retournez les calques un par un et voyez comment cela affecte le framerate. Enfin, sachez que l'implémentation de tilemap de Cocos2D est totalement inefficace après un certain nombre de tuiles. Il y a eu des tentatives pour améliorer le rendu de tilemap, par exemple this one (HKTMXTiledMap) peut être utile de donner un coup de feu.

+0

Mes carreaux sont comme 3.6 MB. Sauf si vous voulez dire quelque chose comme ... RAM? Je vais essayer la chose PVR et revenir plus tard. Je vous remercie. – Voldemort

+0

RAM = (accès aléatoire) mémoire ... 3.6 MB est la taille de fichier que je suppose? Cela n'est pertinent que pour la taille de téléchargement globale de l'application, mais pas pour l'utilisation de la mémoire d'exécution. – LearnCocos2D

+0

Une question: combien de RAM consommerait-il pour une texture de 2048x2048 avec des couleurs de 8 bits? – Voldemort

0

J'ai eu le même problème. Ma solution est simplement de convertir les fichiers .png en .pvr.ccz, et la taille du fichier et l'empreinte mémoire diminuent considérablement. Voici mes étapes:

  1. Utilisez TexturePacker pour convertir des fichiers tileset (fichiers png) en pvr.ccz. Assurez-vous qu'il s'agit d'un mappage 1: 1 (même taille, pas de rotation, aucun remplissage de bordure, aucun découpage ...), et ils doivent être de la même taille (par exemple 2048 x 2048)

  2. ouvrir votre fichier .tmx et changez le chemin du fichier png vers votre fichier pvr.ccz.

c'est tout! Cela fonctionne pour cocos2d-x dans mon cas. Avant le changement mon jeu prend 106 Mo en mémoire, et seulement ~ 90 Mo après le changement, et ce n'est que pour 1 texture tileset.

Questions connexes