Call, un vieil ami qui vous veut du bien
Par mama, dimanche 30 octobre 2005 à 11:42 :: Flash :: #18 :: rss
Fini le style goret avec l'AS2 ? hum pas gagné
Depuis la sortie de Flash 8, on s'est enfin décidé à passer à l'AS2 chez Yamago. Le gros boulot de départ c'etait convertir toutes nos classes et nos composants.
Cette fois c'est bon les composants existent sous forme SWC, pas mal pratique quand même. Par contre j'ai de grosses galères avec le livePreview...
Etant donné que le live Preview execute une instance de la classe de composant dans l'IDE, il est souvent nécessaire de s'assurer qu'il n'execute pas du code qui pourrait poser problème. Un bon moyen est vérifier que le composant est en mode "apercu en direct" et prendre les mesures en conséquence. Pour cela on teste la propriété isLivePreview comme ceci:
class MaClasse extends MovieClip {
function MaClasse () {
if (_global.isLivePreview) return;
...
}
}
Chose étrange en faisant des tests un peu plus poussés, je me rend compte qu'au moment ou je glisse le premier exemplaire de mon composant sur la scène, le code de ma fonction constructeur s'execute et isLivePreview est ignoré. En fait isLivePreview me retourne dans un premier temps undefined qui est normalement la valeur de cette variable en condition normale (c'est à dire PAS dans l'IDE).
C'est la que la bonne vieille instruction Flash 4 dépréciée entre en jeu. Cette instruction force flash à executer le code placé sur l'image passée en paramètre et ca instantannément. C'etait le moyen d'émuler des fonctions en Flash 4 ou en Flash Lite 1.x pour ceux qui développent pour mobile. Et bien cette instruction est extremement utile dans tous les cas ou flash semble avoir besoin d'une image pour s'initialiser. On peut remplacer ce genre de code top goret:
class MaClasse extends MovieClip {
function MaClasse () {
onEnterFrame=__init;
}
private function __init () {
delete onEnterFrame;
if (_global.isLivePreview) return;
...
}
}
par celui ci:
class MaClasse extends MovieClip {
private var call:Function;
function MaClasse () {
call(1);
if (_global.isLivePreview) return;
...
}
}
Et ca marche, car isLivePreview s'initialise à sa valeur correct à l'image 1 du _root (voir commentaire de polo plus bas). Flash 4 n'est pas mort 
PPS: Je n'ai pas eu l'occasion de faire de tests mais je suis quasiment persuadé que cela peut résoudre tous les problèmes d'initialisation de composants imbriqués et autre galères d'initialisation àlaflash.
PPSS: L'execution de call prend 1 milliseconde, ce qui est toujours plus rapide qu'attendre un onEnterFrame.
PPSSS: On peut aussi faire une composition, trois pattern command et un singleton pour eviter tout ca ... avec un onEnterFrame 
Commentaires
1. Le dimanche 30 octobre 2005 à 15:47, par zemax
2. Le dimanche 30 octobre 2005 à 17:21, par polo
3. Le dimanche 30 octobre 2005 à 21:04, par mama
Ajouter un commentaire