Masapi - Dépendances complexes
Par Cédric Tabin le vendredi 23.05.2008, 15:00 - ActionScript - Lien permanent
Suite à mon précédent billet sur les dépendances inter-fichiers gérées par Masapi, j'approfondis ici le sujet en restant basé sur le même petit exemple mais en augementant le niveau de complexité.
L'idée est d'arriver au résultat ci-dessous. Ce qui change par rapport à l'exemple précédent, c'est qu'il y a un nouveau SWF qui est chargé d'animer le texte :
La liaison des dépendences se présente comme ceci :
Le point très intéressant est que, malgré le changement d'architecture, il n'y a pas besoin de toucher le code du preloader ! Il suffit juste de remanier le fichier de configuration pour que masapi s'adapte automatiquement.
Le nouveau XML est donc celui-ci :
<?xml version="1.0" encoding="utf-8" ?> <application> <files> <file name="astorm" url="astorm.swf" type="swf" /> <file name="font" url="font.swf" type="swf" /> <file name="background" url="storm.jpg" type="swf" /> <file name="text" url="text.txt" type="text" /> <file name="animation" url="textAnim.swf" type="binary" /> </files> <dependencies> <dependency name="astorm"> <file name="background" /> <file name="animation" /> </dependency> <dependency name="animation"> <file name="text" /> <file name="font" /> </dependency> </dependencies> </application>
Grâce à cela, masapi va automatiquement détecter que les fichiers text.txt et font.swf doivent être chargés avant textAnim.swf pour que ce dernier fonctionne correctement. Le processus de téléchargement par défaut sera le suivant :
- Les fichiers nécessaires à l'animation du texte sont chargés. Ceux-ci sont ceux qui ont la priorité la plus élevée.
- Les fichiers nécessaires à la page sont chargés. Les deux fichiers chargés à l'étape 1 sont déjà prêts à être utilisés.
- La page (astorm) est chargée et tous les fichiers sont prêts à être utilisés.
Dernier détail : le fichier texteAnim.swf est chargé au format "binary". Cela veut dire comme un fichier binaire (via URLLoader) et non pas comme un simple SWF (Loader). Il ne sera donc pas exécuté une fois chargé. Il faudra manuellement le passer à un objet Loader pour l'afficher :
var animationFile:ApplicationFile = ApplicationFile.getFile("animation"); var animationLoader:Loader = new Loader(); animationLoader.loadBytes(animationFile.loadableFile.getData() as ByteArray); addChild(animationLoader);
Au final, même avec une architecture compliquée (voire même dynamique), il n'y a pas besoin de changer une seule ligne de code pour que le preloader fonctionne. Je pense que c'est la le point fort de masapi par rapport à BulkLoader ! Mes prochaines mises à jour du package iront dans ce sens afin de prendre en compte un maximum de cas.
En espérant éclairicir les choses et faire des heureux Il y a également toute une série d'exemples sur le répository !
Commentaires
Bonjour, j'avoue, je déterre le billet... mais je découvre seulement MassApi.
Les informations ici distillées sont très claires et vraiment accessible.
Néanmoins, il y a une petite chose que j'aimerai éclaircir :
Le système de dépendance, j'ai bien compris le concept. mais l'utilité réelle, j'ai un doute ?
Cela permet donc de charger dans un ordre prédéfini les fichiers externes selon leur "inter-dépendance". L'avantage réel serai donc, en cas d'animation / application très complexe :
lancer au fur et à mesure les animations (sans risquer les "bugs" de fichier manquant pour la bonne exécution des processus) tout en poursuivant le loading des objets suivants ?
Merci en tous cas pour les astuces
Salut,
Je vois plutot l'intéret dans un site complexe ou tu dois charger différentes pages. Typiquement, lorsque tu charges une page de contact, tu auras un fichier avec les labels, un autre avec des objet graphique puis enfin la page en elle-même. L'avantage est que si tout d'un coup tu dois ajouter un nouveau fichier dont tu as besoin (genre fonts partagées) et bien en ajoutant deux lignes dans le xml tout ton chargement est géré et tu n'as plus qu'a l'utiliser dans ta page !
Actuellement je travaille sur un gros projet flash, je peux t'assurer que cette fonctionnalité m'est très utile
@++