[pixLib] - GraphicLib et MovieClipHelper vs MovieClip (partI)
Par Laurent Deketelaere le mercredi, mai 10 2006, 15:49 - Flash plateforme - Lien permanent
Ce qui suit aurait du être en ligne depuis bien longtemps, car à mes yeux il s'agit d'une des pierre angulaire de pixLib. Depuis ça découverte je ne peux plus m'en passer.
AbstractLib
Commençons par le commencement, et donc par AbstractLib, une classe abstraite (constructeur privé) qui est étendu par l'ensemble des «librairies» de pixLib.
Quelques variables…
AbstractLib possède plusieurs variables privées accessible via des méthode public :
- Un nom (String) -> getName, setName
- Une URL (String) -> getURL, setURL
- Un TimeOut (Number) -> getTimeOut, setTimeOut
- Un contenu (non typé) -> getContent, setContent
- Force le chargement (Boolean) -> setAntiCache(avec/sans cache)
- Un niveau de chargement -> getBytesLoaded, getBytesTotal, getPerCent
Quelques methodes…
- load, lance le chargement.
- execute, qui lance load.
- release, détruit la gestion d'événement.
Une gestion d'événement…
- initEventSource, initialise le type d'événement (LibEvent).
- fireEvent, permet d'envoyer un événement typé LibEvent à l'ensemble des abonnées.
- fireEventType, permet d'envoyer un événement typé EventType à l'ensemble des abonnées.
- addListener, permet de s'abonner à l'ensemble des événements.
- removeListener, permet de se désabonner de l'ensemble des événements.
- addEventListener, permet de s'abonner à un type d'événement.
- removeEventListener, faut vraiment que je le dise ?! (comme haut dessus mais l'inverse). ^^
Pour en savoir plus sur la gestion d'événement dans pixLib -> pixLib une programmation événementielle typée.
Voilà pour l'AbstractLib, il s'agit donc d'une classe abstraite qui a tous les outils nécessaire pour gérer le chargement d'un contenu, chacune des classes filles sert à gérer le chargement de contenu plus spécifique, comme GraphicLib qui est spécialisé dans le chargement des swf, jpeg et png de puis Flash8.
GraphicLib
La GraphicLib est donc une extension d'AbstractLib, extension qui est spécialisé dans le chargement de contenus graphiques (exemple : [pixLib] - LibStack ou le multi-chargement )
Quelques methodes…
- initEventSource, initialise le type d'événement (GraphicLibEvent).
- getContent/setContent, le content est maintenant typé MovieClip, il s'agit du clip dans lequel serra chargé l'éléments graphique (swf/jpeg).
- show/hide, affiche ou masque le contenu.
- load, lance le chargement du contenu de l'url dans un MovieClip (getContent).
- release, détruit le contenu de l'occurrence.
- getView == getContent.
Donc pour charger un éléments graphique on utilisera une occurrence de GraphicLib, par contre pour ce qui est de la manipulation de cet élément on va passer par un MovieClipHelper, pas de panique c'est pas bien méchant.
MovieClipHelper
Comme l'AbstractLib il s'agit d'un classe abstraite (constructeur privé), ce qui veut dire qu'on est obligé de créer une sous-classe de MovieClipHelper pour pouvoir profiter de ses fonctionnalitées. Vous devez commencer à vous dire que ça fait beaucoup pour manipuler un MovieClip, mais ce qu'il faut comprendre c'est qu'avec MovieClipHelper on va créer des types de vues, ajouter des fonctionnalitées spécifiques aux MovieClip. Rappelez vous ce que vous faisiez en AS1 avec les prototype pour ajouter des fonctionnalitées spécifiques à un MovieClip (MovieClip.prototype.newMethode) et bien maintenant vous avez tous les outils que vous voulez pour réaliser la même chose sans passer par l'extension (prototype) mais bien par la composition. Voyons ce que ça donne avec un petit morceau de code.
Une classe TimerUI
import com.bourre.transitions.FPSBeacon; import com.bourre.visual.MovieClipHelper; import com.bourre.transitions.IFrameListener; /** * @author [ali_o_kan] - Laurent Deketelaere */ class com.exemple.TimerUI extends MovieClipHelper implements IFrameListener { private var _tf : TextField; private var _datum : Date; function TimerUI(name:String, mc:MovieClip) { super(name, mc); // créé un bloque de texte _tf = view.createTextField("__tf", 100000, 0, 0, 100, 22 ); _init(); } private function _init() : Void { _tf.text = "initialisation"; // Abonne this à FPSBeacon FPSBeacon.getInstance().addFrameListener( this ); } // fonction appelé à chaque changement de frame grace à FPSBeacon public function onEnterFrame() : Void { // mise à jour de l'heure _datum = new Date(); _tf.text = _datum.toString(); } }
Et son Utilisation
import com.exemple.TimerUI; var Timer = new TimerUI( "Une horloge", this );
Dans l'exemple ci-dessus on voit que l'on fait appel à une variable «view», il s'agit du MovieClip que l'on va manipuler par composition. Voyons maintenant plus en détail de quoi est composé MovieClipHelper.
Un constructeur…
private function MovieClipHelper( name : String, mc : MovieClip )
Le constructeur prends deux paramètres, le «name» est un identifiant unique qui permet de récupérer l'occurrence d'un MovieClipHelper à partir de n'importe quel endroit dans une application (cf. MovieClipHelper.getMovieClipHelper(sName:String)) et le «mc» est le MovieClip cible dans lequel sera construit la vue du MovieClipHelper.
Une propriété…
- view : MovieClip -> Il s'agit du clip qui serra manipuler dans la classe.
Une méthode statique…
- MovieClipHelper.getMovieClipHelper(sName:String) : MovieClipHelper -> Permet de récupérer n'importe quelle instance de MovieClipHelper déjà instancié, il suffit pour cela de passer en paramètre de la fonction statique le nom (identifiant) de ce dernier (String).
- MovieClipHelper.isRegistered(sName:String) : Boolean -> Teste et revoit un Boolean pour savoir si une occurrence de MovieClipHelper est déjà enregistré avec cet identifiant.
Quelques méthodes…
- show/hide -> affiche ou masque le contenu de la vue.
- move(x:Number, y:Number) -> déplace la vue du MovieClipHelper.
- getName : String -> revoit le nom (l'identifiant) de l'instance.
Vous me direz que c'est un peu light comme API, mais c'est voulu, car le but du MovieClipHelper est d'être étendu et spécialisé.
Voilà pour l'aspect théorique, dans la deuxième partie je présenterai la mise en place d'une petite application qui utilise LibStack, GraphicLib et MovieClipHelper.
Commentaires
Vraiment excellent ces billets sur 'Pixlib Howto' !
Une vraie bonne idée pour tout ceux qui veulent gouter à ce framework AS2 ( attention d'ailleurs, car l'essayer...c'est l'adopter )
Encore une fois..merci laurent
@+ Romain
oui ça serait bien d'avoir plus d'info en FR merçi pour le post!
Entre nous je crois qu'il y a plus d'info sur pixLib en FR qu'en EN, en dehors de la mailing-List et de la doc.
Heureux que ça vous plaise.
Si vous avez des envies particulières, ou besoin de précisions, n'hésitez pas.
++
Super Merci pour le billet. Heureusement qu'il y a tes Tutos Ali_o_kan sinon je serai encore nul part !
J'ai hâte de voir ton application libStack/GraphicLib/MovieClipHelper car pour l'instant j'ai encore du mal pour comprendre l'utilité de certains trucs...