mardi 10 avril 2007

Hack & Flash

Juste une petite trouvaille sous flash :
Lorsque l'on créé une classe, il arrive que l'on souhaite qu'elle ait une existence visuelle sur le flash.
Alors on la fait vaillamment dériver de la classe MovieClip :
class MaClasse extends MovieClip

et là, on est très déçu parce que ça ne fonctionne pas du tout.

En effet, en ActionScript on ne peut pas instancier la classe MovieClip par un new ; on est obligé d'utiliser attachMovie , duplicateMovieClip ou createEmptyMovieClip. Il en va donc de même pour les classes dérivées de MovieClip.

Donc, comment faire ?
J'ai trouvé cette solution sur ce blog (qui lui même l'a trouvée ailleurs... Relayons, relayons...)

En bref : toutes les classes ont un symbole associé, créé par flash. Ce symbole se trouve dans : __Packages
Donc ma classe MaClasse définie là haut a pour symbole associé : __Packages.MaClasse

À partir de là...
class MaClasse extends MovieClip

{
//on aura besoin de l'id pour associer la classe à ce symbole et pour ensuite créer une instance de ce symbole
public static var id:String = "__Packages.MaClasse";
//on associe une fois pour toute le symbole à sa classe
private static var _isSymbolLinked:Boolean = Object.registerClass(id, MaClasse);

private function MaClasse()
{
super(); //pas certain que ce soit nécessaire...
}
}

et pour créer un objet de ma classe :
import MaClasse;
mc = attachMovie(MaClasse.id, "monInstance", 1);

Cette fois, l'objet créé se comporte vraiment comme un MovieClip.

Aucun commentaire: