Passage de AS 2.0 à AS 3.0 - 1ère partie
Pour beaucoup de flasheur, le passage de l'actionscript 2.0 à l'actionscript 3.0 ne se fait pas sans mal. Il est vrai qu'Adobe nous a pas mal chamboulé avec la venue de son nouveau jouet. Mais, lorsqu'on commence à comprendre la logique et la puissance de l'actionscript 3.0, les quelques efforts pour changer ses habitudes en valent vraiment la peine.
C'est pourquoi nous avons prévu une petite série d'articles qui vous aidera à comprendre quelques une des principales différences
La base de la base, et surement une des choses les plus déroutantes, c'est la nouvel façon de gérer l'interaction avec la souris. En actionscript 2.0, c'était pourtant si simple !
my_mc.onRelease = function() { trace("hi"); }
En actionscript 3.0, on s'amuse bien moins...
my_mc.addEventListener(MouseEvent.CLICK, onClick);
my_mc.buttonMode = true; // pour afficher la main au survol
my_mc.mouseChildren = false; // pour éviter des mauvaises surprises
function onClick(e:MouseEvent):void
{
trace("hi");
}
Pourquoi ce changement ? Il faut comprendre une chose. En actionscript 2.0, les Buttons et les MovieClips n'étaient pas "gérés" de la même manière que les autre objets. Ils étaient "à part", ce qui ne rendait pas le code très "propre", ni même très efficace. Mais, surtout nous les designers ;-) , on s'en moquait bien. La logique nous convenait.
A présent, tous les objets dans Flash sont traité de la même manière. Ce qui permet de rendre l'exécution du code bien plus rapide, et ce qui permet bien plus de flexibilité pour la création de ses propres objets en Programmation Orienté Objets (ou OOP).
Flash suit à présent un modèle "événementiel". Derrière ce terme semblant complexe, se cache une logique toute simple: des objets peuvent être sensible à certaines actions (ou événements). Lorsque ces actions se réalisent, l'objet concerné lance un "événement". Flash peut capter ces événements, puis exécuter une fonction appropriée.
Un exemple "humain" : Nous avons un Bébé (notre objet). Il dort paisiblement. La mère (Flash) est attentive à d'éventuels pleurs (événement) venant de son enfant. Elle "écoute" constamment, pour être sûr d'entendre les pleurs de son bébé. Au moment où elle entendra ses pleurs, elle s'activera et ira le voir (la fonction à éxecuter).
Notre fonction actionscript peut être "écrite" comme suite:
// Maman (Flash) se décide à écouter monBebe (objet)
// Elle se décide d'écouter les PLEURS de monBebe, de type Baby.PLEURS, mais d'ignorer le reste
// Si elle détecte des Baby.PLEURS venant de monBebe, elle ira le consoler.
// Mais, si elle entend des Baby.PLEURS venant d'un AUTRE bébé, elle ne fera rien
monBebe.addEventListener(Baby.PLEURS, consoler); // la raison pour laquelle consoler() a été appelé est un événement de type Baby (Baby.PLEURS).
// Par convention, il faut passer cette information à la fonction en paramètre, sinon Flash envoie une erreur
function consoler(e:Baby):void
{
gotoAndHush("the baby");
}
Bien entendu, il existe d'autre événement "Baby". Il y a Baby.RIRE, Baby.PARLE, Baby.PLEURS, etc...mais la mère a décidé de n'être attentif qu'aux Baby.PLEURS dans notre exemple.
En actionscript 3.0, c'est ce que l'on fait pour nos Buttons et MovieClips. Ils sont sensibles aux interactions avec la souris. Ils peuvent "pleurer" un événement MouseEvent.CLICK (as2: onRelease), MouseEvent.MOUSE_DOWN (as2: onPress) et bien d'autre. On peut simplement dire à Flash "d'écouter" si ces derniers lancent ces événements, puis éxécuter des fonctions en conséquence.
Récapitulons:
// Flash "écoute" si my_mc est cliqué
my_mc.addEventListener(MouseEvent.CLICK, onClick);
my_mc.buttonMode = true;
my_mc.mouseChildren = false;
// si my_mc est cliqué, Flash éxécute la fonction onClick(), en passant en paramètre
// le type d'événement (ici: MouseEvent).
function onClick(e:MouseEvent):void
{ trace("hi");
}
Même si l'adaptaion au début est un peu rude, le fait que TOUS les objets Flash sensible à des événements utilisent cette logique fait que nous avons bien moins de méthodes et code à apprendre par coeur. En OOP, une autre puissance de ce nouveau modèle vient du fait que nous pouvons maintenant créer nos propres événements ! Mais ce sera pour un autre article.
