2012-12-09 3 views
0

Je travaille sur un projet Flash GUI qui nécessite le chargement dynamique de nombreuses images lors de l'exécution.Création d'une bibliothèque d'images/fichiers SWC lors de l'exécution à l'aide de fichiers externes

Problème: Actuellement chaque fois une classe initialise, il charge ses actifs (images) du disque dur, mais cela prend généralement trop de temps (par exemple: J'ai une liste de 100 éléments, chaque élément a le même arrière-plan, qui est une image PNG stockée sur le disque dur, mais il doit charger l'image 100 fois à partir du disque dur pour rendre la liste, car la classe de l'élément est initialisée 100 fois). De plus, je veux que les ressources soient cachées aux utilisateurs, donc je veux l'emballer d'une façon ou d'une autre, dans un seul fichier.

Solution: Je pense à SWC. J'ai entendu dire que c'est une sorte de bibliothèque pour Flash. Mais je n'ai presque aucune expérience de travail avec CFC. Et il y a trop d'images, cela prendrait beaucoup de temps à importer manuellement et à mettre le nom de la classe pour chacune d'entre elles dans la bibliothèque FLA. Mais j'ai déjà un fichier XML qui stocke les noms de classes et le chemin vers les assets de chaque classe. Je peux donc charger toutes les images dans une variable, mais je ne sais pas comment écrire cette variable dans un fichier SWC sur le disque dur pour le charger plus tard en tant que bibliothèque.

[MyButton.png] - charge RAM -> [myButton: Bitmap] - écriture dans le fichier SWC sur le disque dur -> [Assets.swc] - import SWC file at runtime -> [addChild (assets.myButton)]

Le texte en gras est la partie qui me manque.

Merci pour votre temps! Toute aide est grandement appréciée.

Répondre

0

SWC est un fichier que vous "précompilez" c'est à peu près la même chose qu'un swf, mais vraiment rien que vous "créez à la volée". La plus grande différence est qu'un swc est quelque chose qui est "compilé" dans un swf et non chargé dynamiquement. Autrement dit, vous ne pouvez pas charger un fichier swc pendant l'exécution, il est fourni pendant la compilation. Par conséquent, chaque image ajoutée au swc augmentera sa taille, la bonne chose est qu'il peut être partagé entre différents fichiers SWF. Maintenant, corrigez-moi si je vous ai mal compris, mais il semble que vous rechargiez l'image à partir du disque dur chaque fois que cette image est utilisée? Donc 100 instances de "Ball" qui est liée à l'image "Ball.png" chargeraient ce fichier 100 fois?

Si c'est le cas, pourquoi ne pas simplement créer un ImageManager et laisser celui-ci conserver une instance des images chargées, puis le partager entre toutes les instances qui utilisent cette image? AFAIK il n'y a pas de moyen facile de faire cela, mais j'ai écrit un billet de blog (puisque je ne pouvais pas trouver une meilleure façon de vous donner cette solution) si vous êtes intéressé par un exemple de mise en cache des images chargées. Il est assez naïf et tourne autour d'un ImageManager statique, ne chargeant que des images, les mettant en cache par leur identifiant-URL et fournissant une nouvelle instance de bitmapdata si elles sont déjà chargées. Cependant, cela fonctionne comme un charme et il est plus efficace que de toujours charger l'image à partir du disque dur.

Vous pouvez trouver le billet de blog ici: http://messer1024.blogspot.se/2012/12/caching-loaded-images-in-as3.html

+0

Merci beaucoup pour la réponse.J'ai pensé à une approche similaire, mais j'ai aussi besoin que ces images soient stockées dans un seul fichier, et peut-être un mot de passe ou une sorte de protection. Suggéreriez-vous un type de méthode d'emballage d'actifs? –

+0

Vous pouvez travailler avec des fichiers zip et décompressez-les après chargement si vous le souhaitez. Cela pourrait être le moyen le plus facile, cela dépend si elles changent beaucoup ou pas. Si elles changent beaucoup, il est préférable de travailler avec chaque image ou sous-ensemble d'images, puis d'utiliser le cache s'il est distribué sur Internet. Sinon, un fichier zip peut être bon pour votre but. –

+0

ne me souviens plus de l'outil de compression utilisé en dernier mais il était assez facile d'utiliser cette tactique si je me souviens bien –

Questions connexes