Gestion des Movieclips par Flash
Par -Alexandre LEGOUT aka LAlex- le 4 novembre 2003, 16:17 - AS2 - Lien permanent
Ted Patrick vient de donner sur la liste Flashcoders une explication de la manière dont flash gère ses données, et plus particulièrement les movieclips sur ce thread. En effet, les quatre types de données gérées par le Flash Player sont
- Les types simples (nombre, chaines, booléens), accédés par valeur
- Les objets, accédés par référence
- Les fonctions, accédées par référence
- les movieclips, accédés par profondeur.
//add 2 movieclips of the same name
a = _level0.createEmptyMovieClip("ted",1);
b = _level0.createEmptyMovieClip("ted",2);
//which one is named ted? >> Lowest Depth Wins!
trace(_level0.ted.getDepth()) // 1
//trace the references a & b
trace(a.getDepth()) // 1
trace(b.getDepth()) // 2
//add some data
_level0.ted =23
//Data, Objects,Functions, Primitves can overshadow, movieclip path
trace(_level0.ted) // 23 Sur ce, il conseille de travailler les movieclips toujours par référence (valeurs de retour de createEmptyMovieClip par exemple), pour éviter ce type de problèmes.
Voila pourquoi dans Flash MX 2004 il a du être plutôt facile d'implémenter la méthode MovieClip.getInstanceAtDepth .... ![]()
Commentaires
Yep,
à ce propos, est ce que le bug du duplicateMovieClip ainsi que celui du removeMovieClip d'une instance placée en dur dans l'IDE est règlé avec MX2004 ? pas encore eu le temps de checker et puis pas envie de mettre la main dans MX2004 pour le moment
Tu parles de quel bug exactement ? Le fait qu'on soit obligé de passer la profondeur en positif pour pouvoir supprimer un clip placé "en dur" dans l'IDE ? 8|
A vrai dire, je n'ai pas vraiment non plus envie de remettre les mains dans MX 2004 pour l'instant ...
je viens de tester... bah non ça marche pô
par contre on peut se servir de getNextHighestDepth(), et ça c'est quand même bien pratique...
b1_btn.onPress = function() {
pouet_mc.swapDepths(pouet_mc.getNextHighestDepth());
trace(pouet_mc.getDepth());
pouet_mc.removeMovieClip();
};
ici, le trace renvoie 0
t'es certain que c'était/est un bug ?? j'ai toujours compris qu'uniquement un movieClip crée dynamiquement pouvait être effacé!
cedric >> En fait, les clips crées "à la main" n'ont pour seule particularité que d'avoir une profondeur négative ... La méthode removeMovieClip vérifie en fait la profondeur. Donc, si tu change la profondeur d'un clip non dynamique pour une valeur positive, tu pourras le supprimer avec removeMovieClip ...
et inversement, si tu mets en profondeur négative, tu pourras supprimer avec unloadMovie
ca mériterait même une prototype destroyMovie lol et tester la profondeur
Fil des commentaires de ce billet