Bienvenue, Invité. Merci de vous connecter ou de vous inscrire.
Avez-vous perdu votre e-mail d'activation ?

Auteur Sujet: Petite question bouton As3  (Lu 3262 fois)

briseur

  • Wisi Pilier de comptoir
  • **
  • Hors ligne Hors ligne
  • Messages: 57
    • Voir le profil
Petite question bouton As3
« le: Avril 27, 2009, 13:19:04 pm »
Bonjour,

Je tente de me mettre rapidement un peu à l'As3, mais dès le début ça bug.
Je cherchai à reprendre un code tout simple sur un bouton que j'avais, mais il semblerai qu'en As3 ça ne se code pas comme ça
Je pense que ce doit être tout bête mais bon, vais encore passé pour un incapable :-\

Le code simple que j'utilisai en As2
accueil_mc.onRelease = function(){
gotoAndStop("2");
}
// c'est juste un exemple

Maintenant je voudrai savoir comment réutilisé la même chose en As3

Merci d'avance
IP archivée

Stéphane L

  • Wisi tout neuf
  • *
  • Hors ligne Hors ligne
  • Messages: 9
    • Voir le profil
    • WWW
Re : Petite question bouton As3
« Réponse #1 le: Avril 27, 2009, 15:57:46 pm »
Hello,

Pas mal de choses ont changé, mais tu pourras plus t'en passer, et bientôt, tu renieras le temps ou tu utilisais l'as2 :)

Premièrement, l'événement release n'existe plus, il est remplacé par l'événement CLICK, l'équivalent de ton code donnerait donc ceci :

accueil_mc.addEventListener(MouseEvent.CLICK, Appel);

function Appel(evt:MouseEvent)
{
accueil_mc.gotoAndStop("2");
}

Il te faut gérer les piles d'événement sur les éléments de ta scène : ajouter à la pile avec la méthode addEventListener, qui prends en paramètre le type d'événement, puis le délégué (méthode) en second. la fonction Appel sera donc appelée au clic sur accueil_mc.
Il existe d'autres paramètres, tu pourras t'embarrasser avec plus tard, j'ai l'habitude, comme beaucoup de mettre :

accueil_mc.addEventListener(MouseEvent.CLICK, Appel,false,0,true);

Pour obtenir +/- ce résultat en AS2, on utilisait mx.utils.Delegate; mais ça n'était pas vraiment satisfaisant à bien des égards.

En espérant avoir pu t'aider,
Stéphane.


« Dernière modification: Avril 27, 2009, 16:01:10 pm par Stéphane L »
IP archivée
Quelques articles du web : un peu de développement

briseur

  • Wisi Pilier de comptoir
  • **
  • Hors ligne Hors ligne
  • Messages: 57
    • Voir le profil
Re : Petite question bouton As3
« Réponse #2 le: Avril 27, 2009, 17:34:15 pm »
Je vais essayé ça tout de suite
Merci pour ta réponse, et de sa rapidité
IP archivée

RMistral (Wisi)

  • Global Moderator
  • Wisi Comment on décroche
  • *****
  • Hors ligne Hors ligne
  • Messages: 662
    • Voir le profil
    • WWW
Re : Petite question bouton As3
« Réponse #3 le: Avril 28, 2009, 06:56:50 am »
Bonjour,

Le principe en AS3 est toujours le même : un écouteur lance une fonction. En mots simples un écouteur est une espèce d'oreille sur la scène chargée d'écouter un événement. Lorsque cet événement se réalise, l'écouteur appelle la fonction qui lui est associée.

La plupart des codeurs écrivent l'écouteur puis la fonction. Perso je fais l'inverse mais bon les goûts et les couleurs....

Le code de Stéphane L fonctionne aussi comme cela :

//function nom de la fonction (valeurs de l'événement):pas de retour {
function surClick(evenement:Event):void{
     //Les actions à faire
     accueil_mc.gotoAndStop("2");
}
//L'écouteur
//nom du MovieClip auquel tu associes l'événement.addEventListener(Type d'événement.événement,fonction à exécuter)
accueil_mc.addEventListener(Mouse.Event,surClick)
//C'est plus sympa d'avoir la main sur le bouton non ?
accueil_mc.buttonMode=true;

Dans la vraie vie, il est rare d'avoir qu'un seul bouton ou objet à gérer. Dans le cas ou tu dois gérer x boutons sur la scène ou x Movieclip (MC), il faut s'organiser pour que le nombre de ligne de code reste constant quelque soit le nombre de bouton à gérer. C'est un des grands principes de la programmation.

Vieux proverbe informatique : Moins de lignes de code tu auras moins de bugs chez le client il y aura ;D

En effet si tu as par exemple 1000 MC sur ta scène tu n'as pas forcément l'envie de copier coller 1000 fonctions et 1000 écouteurs.


Principe

Tu vas être confronté dans ta vie de codeur à 3 grands types de situation :

I - Un seul événement à gérer et x MC sur la scène devant réagir à cet événement par une seule et même action
      C'est le cas typique d'une animation chute de neige ou autre .......

II - Un seul événement à gérer et x MC sur la scène devant réagir à cet événement en fonction du MC cliqué
      C'est le cas d'un menu de site Web par exemple

III - Plusieurs événements à gérer et x MC sur la scène devant réagir à l'un des événements.
       Lorsque tu souhaites par exemple prendre en main les états d'un bouton (normal, survol)



I - Un événement et x MC
Dans cette situation il faut faire une fonction et dans le corps de ton programme une boucle appelant cette fonction sur chaque MC que tu souhaites gérer.

Pour que cela fonctionne facilement il faut prendre soin de nommer l'ensemble des MC sur la scène avec un nom composé d'une partie fixe et d'une partie mobile. Préfère bt0, bt1.......brx à acceuil_mc, venir_mc etc.....

L'organisation

Sur ta scène, les MC nommés bt0, bt1,....btx en nom d'occurrence sur un calque. Sur un nouveau calque le code ActionScript

code

//fonction pour afficher dans la fenêtre de sortie le nom du MC cliqué
function surClick(evenement:Event):void {
//Affiche le nom du MC sur lequel je viens de cliquer ou autre action a ta convenance
trace(evenement.currentTarget.name)
}
//////////////////////////////// corps du programme //////////////////////////////////////////////
//Boucle de création pour 4 boutons
for (var i:Number=0; i<4; i++)
{
//Nous voulons un curseur main sur les MC
this["bt"+i].buttonMode = true;
//Evenement click sur le MC
this["bt" + i].addEventListener(MouseEvent.CLICK, surClick);
}

II - Un événement et x MC devant réagir en fonction du MC cliqué

Il faut juste, dans la fonction, prendre en main l'action a effectuer en fonction du bouton sur lequel le visiteur clique. Pour cela il faut utiliser un aiguillage (switch) pour réaliser une action spécifique en fonction du bouton activé. Le corps du programme ne change pas

La fonction devient donc :
//fonction pour afficher dans la fenêtre de sortie le nom du MC cliqué
function surClick(evenement:Event):void {
//En fonction du MC sur lequel je viens de cliquer
switch(evenement.currentTarget.name){
case "bt0":
//Actions pour le bouton 0 c'est par exemple le bouton accueil du site
trace("vous avez cliqué sur le bouton :"+evenement.currentTarget.name)
break
case "bt1":
//Actions pour le bouton 1 c'est par exemple le bouton contact du site
trace("vous avez cliqué sur le bouton :"+evenement.currentTarget.name)
break
case "bt2":
//Actions pour le bouton 2 c'est par exemple le bouton infos pratiques du site
trace("vous avez cliqué sur le bouton :"+evenement.currentTarget.name)
break
case "bt3":
//Actions pour le bouton 3
trace("vous avez cliqué sur le bouton :"+evenement.currentTarget.name)
break
}

}

III - Plusieurs événements et x MC sur la scène devant réagir à l'un des événements.

Je souhaite par exemple prendre en compte les événements survol de la souris, quitter le survol et click sur un MC. Dans un tel cas, il est souhaitable de regrouper l'ensemble des écouteurs dans une fonction puis d'appeler cette fonction à partir d'une boucle. Cela améliore la lisibilité du code et te prépare par la suite à la notion d'eventDispacher.

Il faut aussi, pour des boutons, avoir 2 images clés dans le MC bouton. La première le bouton en état normal, la seconde le bouton au survol.

Nous allons donc avoir 3 grands blocs de code.
Les fonctions gérant les événements, la fonction regroupant les écouteurs, la boucle pour créer nos boutons.
//------------------------------------- Les fonctions sur les événements ------------------------------------
//Click
function surClick(evenement:Event):void {
        //this fait référence au bouton actif
this.gotoAndStop(2)
//Affiche le nom du MC sur lequel je viens de cliquer
switch(evenement.currentTarget.name){
case "bt0":
//Actions pour le bouton 0
trace("vous avez cliquez sur le bouton :"+evenement.currentTarget.name)
break
case "bt1":
//Actions pour le bouton 1
trace("vous avez cliquez sur le bouton :"+evenement.currentTarget.name)
break
case "bt2":
//Actions pour le bouton 2
trace("vous avez cliquez sur le bouton :"+evenement.currentTarget.name)
break
case "bt3":
//Actions pour le bouton 3
trace("vous avez cliquez sur le bouton :"+evenement.currentTarget.name)
break
}

}
//Survol
function survol(evenement:Event):void {
        //this fait référence au bouton actif
this.gotoAndStop(2)
trace("Vous survoler le bouton");
}
//Fin du survol
function finSurvol(evenement:Event):void {
        //this fait référence au bouton actif
this.gotoAndStop(1)
trace("Vous quitter le bouton");
}
//---------------------------------------- le regroupement des écouteurs -------------------------------------
//BtActif est le MC sur lequel nous travaillons
function regroupeEcouteur(BtActif:MovieClip):void {
BtActif.addEventListener(MouseEvent.CLICK, surClick);
BtActif.addEventListener(MouseEvent.MOUSE_OVER, survol);
BtActif.addEventListener(MouseEvent.MOUSE_OUT, finSurvol);
//Affiche la main
BtActif.buttonMode=true;
}

//////////////////////////////// corps du programme //////////////////////////////////////////////
//Boucle de création pour 4 boutons
for (var i:Number=0; i<4; i++) {
this["bt"+i].gotoAndStop(1)
//Appel de la fonction de regroupement des écouteurs
regroupeEcouteur(this["bt"+i])
//Autres actions
}

Voilà bon courage dans ton apprentissage d'AS3
« Dernière modification: Avril 29, 2009, 04:47:09 am par RMistral (Wisi) »
IP archivée
Savoir mal est pire qu'ignorer

briseur

  • Wisi Pilier de comptoir
  • **
  • Hors ligne Hors ligne
  • Messages: 57
    • Voir le profil
Re : Petite question bouton As3
« Réponse #4 le: Avril 29, 2009, 02:06:45 am »
WoW je viens juste de voir ton post RMistral
Que dire à part un grand merci pour  ces explications très détaillées.
C'est nickel
IP archivée

kriztho

  • Global Moderator
  • Wisi Comment on décroche
  • *****
  • Hors ligne Hors ligne
  • Messages: 1500
    • Voir le profil
    • WWW
    • E-mail
Re : Petite question bouton As3
« Réponse #5 le: Avril 29, 2009, 05:26:08 am »
Un petit lien vers un blog sur les baseS de l'AS3, rubrique bouton.
IP archivée
______________________________________________________________
Je ne connais pas grand chose, mais je progresse...
[La veille techno du web] - [Histoire d'écrire de l'informatique]

briseur

  • Wisi Pilier de comptoir
  • **
  • Hors ligne Hors ligne
  • Messages: 57
    • Voir le profil
Re : Petite question bouton As3
« Réponse #6 le: Avril 29, 2009, 22:19:28 pm »
merci kriztho
IP archivée

jeronicoz

  • Wisi tout neuf
  • *
  • Hors ligne Hors ligne
  • Messages: 1
    • Voir le profil
Re : Petite question bouton As3
« Réponse #7 le: Mai 24, 2011, 10:44:08 am »
Bonjour, j'ai suivi le script mais si j'ai bien trace qui fonctionne, aucun des boutons ne passent sur la frame 2... une explication ?
Merci.
IP archivée
 




 
Wisibility.com
Wisibility est un sité dédié à la formation aux métiers l’image. Vous y trouverez différentes ressources gratuites et payantes vous aidant à maîtriser les logiciels graphiques tels que Photoshop, Illustrator, InDesign, Flash…

Aujourd’hui, Wisibility réunit une vingtaine d’experts, intervenant en Entreprise pour former graphistes, webdesigners, développeurs web, photographes, monteurs, trucistes…

Depuis 2006 nous nous sommes spécialisés dans les tutoriels vidéos permettant de se former à distance. Des centaines de tutoriels accessibles gratuitement et une boutique sur laquelle vous trouverez des formations complètes et des exercices pratiques.

Wisibility organise des événements graphiques, réalise une WebTV

Wisibility sur Adobe TV

Retrouvez nos tutoriels et nos émissions
sur le site officiel Adobe



 
Nos partenaires

Adobe   fotolia   WebINK   Amka   macandphoto   club
 


Contact - Wisibility est une marque déposée - Mentions légales

Creative Commons License

infos - inspiration - rendez-vous - logiciels materiels - tutoriels gratuits - formations en ligne - forums - galeries - glossaire - wisi tv