Bug ou pas bug ? Gestion des packages par Flash MX 2004
Par -Alexandre LEGOUT aka LAlex- le 18 septembre 2003, 19:39 - Divers - Lien permanent
Peut-être que je ne vais rien apprendre à personne, mais je viens de découvrir que Flash crée ses packages sur le _root des animations. J'ai par hasard fait un createEmptyMovieClip sur _root avec un nom qui était le même que le nom d'un package, et impossible d'accéder aux classes du package !!! 8O
L'explication est sans doute que AS2 n'utilise pas le _global pour que des loadMovie n'interfèrent pas entre eux au niveau des classes, mais là ça fait quand même tout drôle ... Une autre solution aurait pu être trouvée pour un peu plus de logique ... :?
Je continue donc a penser que Macromedia n'a pas forcément fait le meilleur choix en créant un simple "traducteur" AS2 > AS1, au lieu de créer un vrai langage objet. Chez Macromedia comme dans tout développement, le bricolage n'ammène rien de bon en général ... :roll:
Commentaires
Bon ... donc je continue à dire que pour le moment c'est super joli mais cela sert à rien je vais aller retourner à mes packages varsion Moock : http://moock.org/webdesign/lectures/ff2003Workshop/

Franchement à part une version 7.5 du player et un FLASH MX 2004 "vraiment pro" pour l'instant j'ai du mal avec l'AS2 pour ce genre de truc
On fait une pétition ? Moock l'a fait pour la class de Preload et il en a eu une pour les MovieClip .. alors tant ... Faudra voir à envoyer un message version MediaBox (30 modos en collaires) et vraiment en parler à la FlashParade ...
bye
Boaf ... je pense pas que Macromedia en ai quelque chose a faire de 30 modos de MediaBox en colère ... :?
De toutes facons, il va falloir s'habituer à AS2 ... avec ses avantages et inconvénients ! :roll:
Donc, je reste sur mon petit coup de gueule, mais ca ne sert à rien de monter ca en flèche non plus ...
Je suis pas tout seul on dirait à être pas contant
Vu sur le blog de nodrugnobug :
- Article de Steve Vachon : http://www.svachon.com/articles/?ref=2003_09_12
- Chez Macromedia : http://www.macromedia.com/support/flash/ts/documents/mx_04_emerging_issues.htm
> Flash crée ses packages sur le _root des animations.
Je viens de regarder le bytecode d'un fichier avec flasm 1.5 alpha et les packages sont crees sur _global et pas sur _root. La creation des package suit le meme format que prescript par Moock avec des tests inseres automatiquement pour savoir quand creer l'object container. L'actionscript reconstitue est comme ca:
if (!_global.mx)
_global.mx = {};
if (!_global.mx.transitions)
_global.mx.transitions = {};
if (!_global.mx.transitions.Tween) {
_global.mx.Tween = function(...); // definition du constructor
... // et le reste
}
Je pense qu'en creant le movieclip sur _root, tu n'as pas detruit le package mais tu as probablement bloque son acces dans la chaine des portees, ce qui est normal vu que _global est le dernier de la chaine. Est-ce que tu peux poster ton code de test pour confirmer?
@ekameleon: Sympa la critique de Steve Vachon :D, merci pour le lien.
Pour mon code, il s'agit d'une classe bêtement déclarée dans une package du genre
class mypack.MyClasse {Ensuite, je crée un clip vide sur _rootpublic static function MyMethod() {
// ...
}
}
_root.createEmptyMovieClip("mypack",10);Et dans ma classe, impossible d'atteindre les membres statiques ma classe, que ce soit avec le chemin complet ou aprés un import :// Appel avec le chemin complet du packagemypack.MyClass.MyMethod()
// ou aprés "import" du package
import mypack.*;
MyClass.myMethod();
En fait, si c'est bien à cause de la chaine de portées comme tu le dis, je ne trouve pas normal que _root fasse partie de la chaîne de portées, alors que ce n'est rien d'autre qu'un clip (un peu particulier parce qu'il existe un scope qui lui est dédié) ... :? En fait, il n'est tout simplement pas normal que des instances (comme des clips) puissent interférer avec des classes. :roll:
Il aurait peut-être fallu créer un scope à part (genre _class) qui soit dédié à la déclaration des classes AS2, et qui soit le seul inspecté quand on utilise l'opérateur new (ou le premier inspecté, étant donné qu'on veut rester compatible AS1) ... Avoir les avantages de la POO "class based" et les inconvénients de la POO "prototype based" de AS1 n'est pas vraiment la panacée ...
Oui bien d'accord, c'est vraiment un beau bordel tout ca :D!
J'ai fais quelques tests bases sur ton code et je pense qu'il s'agit bien d'un probleme de porte. Je peux utiliser le chemin absolu:
_global.mypack.MyClass.MyMethod()ou utiliser la formule normale a partir d'une autre timeline non polluee (un movieclip sur _root):mypack.MyClass.MyMethod()Donc comme dans ton code, mon test a donne:import com.MyClass;Il y a quand meme un truc bizarre: si je place dans ma timeline un movieclip avec nom d'instance "com" (non dynamique), les deux appels marchent alors que d'apres les regles de la porte, aucun des deux ne devrait marcher, meme si je rajoute toujours le createEmptyMovieclip???MyClass.test(); // ca marche
this.createEmptyMovieClip("com", 1);
MyClass.test(); // ca marche plus
_global.com.MyClass.test(); // ca remarche
import com.MyClass;MyClass.test(); // ca marche ??
this.createEmptyMovieClip("com", 1);
MyClass.test(); // ca marche aussi ???
Je peux meme faire:
[as]trace
Hmm, on dirait que la connection a coupe au milieu du transfert, voila la suite:
Je peux meme faire:
trace(com._x); // 50trace(com.MyClass); // [type Function]
Ces deux appels referencent deux object differents et ca marchent (avec un warning quand meme du compilateur, et c'est vraiment pas bon pour la lecture du code)! Donc on dirait que seulement les movieclips dynamiques fouttent tout en l'air ou que Flash utilisent deux types d'acces de portes en fonction de ce qui est declare a authoring time et de ce qui se passe pendant le run-time.
Vraiment bizarre tout ca. La porte en Flash est un monde a part.
En tout cas, utiliser flasm aide au moins a voir ce qui se passe dans le swf. Au fait, je ne sais pas si tu as sur la liste swfcoder, mais voila le lien pour flasm 1.5 alpha:
http://www.nowrap.de/flasm15alpha.zip
Un autre truc qui n'a rien a voir, c'est quoi le smiley pour "sourcils fronces"? J'ai vu que tu l'utilisait mais il n'est pas dans la liste que tu as donnee :p
Wouah !!! 8O Que d'investigations !!!

Je vais continuer un peu dans ton sens dés que j'ai deux secondes ... ce mystère se doit d'être éclairci !!!
Sinon, pour les sourcils froncés, c'est : ? => :?
Fil des commentaires de ce billet