Forums Développement Multimédia

Aller au contenu

- - - - -

Ecouteurs d'evenements sur un Sprite

CODE AS3 Flash

85 réponses à ce sujet

#1 lukas

    Ceinture Jaune

  • Members
  • PipPip
  • 28 messages

Posté 14 May 2015 - 22:51 PM

Bonjour messieur,

Je souhaite faire un simple écouteur d’événement de type Mouse Out sur un sprite ( recGris ) et cela ne marche pas, pourtant avec un objet dessiné directement sur la scene il n'y a aucun probleme quelqu'un peut il m'aider stp ?

voici mon script :

var Txt_couleur:TextField = new TextField();
var formatcouleur:TextFormat = new TextFormat();

formatcouleur.font = "Arial";
formatcouleur.color = 0x1979BB;
formatcouleur.size = 15;
formatcouleur.bold = true;

Txt_couleur.defaultTextFormat = formatcouleur;
Txt_couleur.x = 525;
Txt_couleur.y = 80;
Txt_couleur.autoSize = TextFieldAutoSize.LEFT;
Txt_couleur.selectable = false;
Txt_couleur.text = "";

var recGris:Shape = new Shape ();
recGris.graphics.beginFill(0xF3F3F3);
recGris.graphics.drawRect(425, 0, 225, 120);



Txt_PLS.addEventListener(MouseEvent.MOUSE_OVER, TxtCouleur);

function TxtCouleur(event:MouseEvent):void {

Txt_couleur.text = "PLS";

addChild(recGris);
addChild(Txt_couleur);
removeChild(Txt_PLS);

}

recGris.addEventListener(MouseEvent.MOUSE_OVER, RecGrisOut);

function RecGrisOut(event:MouseEvent):void {

addChild(recGris);
removeChild(Txt_couleur);
addChild(Txt_PLS);

}

ce que je ne comprends vraiment pas c'est pourquoi la fonction "RecGrisOut" ne se declenche pas quand je sors de mon carré ?

#2 gustave02

    Ceinture Marron

  • Members
  • PipPipPipPipPipPip
  • 166 messages

Posté 15 May 2015 - 00:28 AM

il est tard pour moi aussi. (1h30)
tu écris " un simple écouteur d’événement de type Mouse Out"

et tu met en code

Txt_PLS.addEventListener(MouseEvent.MOUSE_OVER, TxtCouleur)
recGris.addEventListener(MouseEvent.MOUSE_OVER, RecGrisOut);

je comprend pas?

et tu mets

recGris.addEventListener(MouseEvent.MOUSE_OVER, RecGrisOut); // quand tu est sur recGris tu fais


function RecGrisOut(event:MouseEvent):void { // cette fonction

addChild(recGris);// qui sert a addChild recGris et comme tu est sur recgris etc

bizarre non?

de plus je ne sais identifier Txt_PLS. peut etre avec un fla?

bonne nuit.
@+gustave02

#3 lukas

    Ceinture Jaune

  • Members
  • PipPip
  • 28 messages

Posté 15 May 2015 - 09:50 AM

Bonjour,

Effectivement il y a une erreur c'est bien un Mouse_Out et non un mouse over sur la fonction "RecGrisOut".

code corrigé :

var Txt_couleur:TextField = new TextField();
var formatcouleur:TextFormat = new TextFormat();

formatcouleur.font = "Arial";
formatcouleur.color = 0x1979BB;
formatcouleur.size = 15;
formatcouleur.bold = true;

Txt_couleur.defaultTextFormat = formatcouleur;
Txt_couleur.x = 525;
Txt_couleur.y = 80;
Txt_couleur.autoSize = TextFieldAutoSize.LEFT;
Txt_couleur.selectable = false;
Txt_couleur.text = "";

var recGris:Shape = new Shape ();
recGris.graphics.beginFill(0xF3F3F3);
recGris.graphics.drawRect(425, 0, 225, 120);



Txt_PLS.addEventListener(MouseEvent.MOUSE_OVER, TxtCouleur);

function TxtCouleur(event:MouseEvent):void {

Txt_couleur.text = "PLS";

addChild(recGris);
addChild(Txt_couleur);
removeChild(Txt_PLS);

}

recGris.addEventListener(MouseEvent.MOUSE_OUT, RecGrisOut);

function RecGrisOut(event:MouseEvent):void {

addChild(recGris);
removeChild(Txt_couleur);
addChild(Txt_PLS);

}

Une explication concenant le fonctionement, j'ai un texte sur ma scene, quand la souris passe au dessus du texte il disparrait un autre (de couleur differente ) apparaît a sa place sur un fond gris (le fameux sprite recGris) et quand la souris sort de ce rectangle le texte initial réapparaît et tous le reste (texte gras + fond gris ) disparaient .

Si je dessine les objet sur la scene tous fonctionne, le probleme c'est que je souhaite tout faire en As3 et, bizarrement ça ne marche pas .

Je t'ai mis mon fla, merci pour ton aide

#4 lukas

    Ceinture Jaune

  • Members
  • PipPip
  • 28 messages

Posté 15 May 2015 - 09:54 AM

ficher fla (version cs6)

Fichier(s) joint(s)

  • Fichier joint  Main.fla   5.47 Mo   26 téléchargement(s)


#5 gustave02

    Ceinture Marron

  • Members
  • PipPipPipPipPipPip
  • 166 messages

Posté 15 May 2015 - 10:21 AM

bonjour

essais avec var recGris:Sprite = new Sprite (); au lieu de var recGris:Shape = new Shape ();

de toute façon je ferais pas comme ça.

j'utiliserais la class simpleButton

vois déja si ca t'aide
@+gustave02

ps dans le fla corrige recGris.addEventListener(MouseEvent.MOUSE_OUT, RecGrisOut);

#6 lukas

    Ceinture Jaune

  • Members
  • PipPip
  • 28 messages

Posté 15 May 2015 - 10:52 AM

Effectivement en remplaçant ---> var recGris:Shape = new Shape (); par var recGris:Sprite = new Sprite ();
ça fonctionne, peut tu m'expliquer pourquoi ? un Shape ça ne marche pas ?

Peux tu m'expliquer comment tu procédés avec la classsimple button, et c'est quoi l'avantage ?

#7 gustave02

    Ceinture Marron

  • Members
  • PipPipPipPipPipPip
  • 166 messages

Posté 15 May 2015 - 11:09 AM

bonjour
tu dis
"ça fonctionne, " cool
"peut tu m'expliquer pourquoi ?" je suis pas fort dans les explications
donc voila selon doc adobe

Cette classe (shape) sert à créer des formes légères par le biais de l’interface de programmation d’applications (API) de dessin ActionScript. Cette classe comprend une propriété graphics, qui vous permet d’accéder aux méthodes de la classe Graphics.
La classe Sprite comporte également une propriété graphics, ainsi que d’autres fonctions exclues de la classe Shape. Par exemple, un objet Sprite est un conteneur d’objet d’affichage, ce qui n’est pas le cas d’un objet Shape (qui ne peut pas contenir d’objets d’affichage enfant). De ce fait, les objets Shape consomment moins de mémoire que les objets Sprite qui contiennent les mêmes images. Néanmoins, un objet Sprite prend en charge les événements de saisie utilisateur, ce qui n’est pas le cas d’un objet Shape.


"un Shape ça ne marche pas ? " ben non.

Peux tu m'expliquer comment tu procédés avec la classsimple button, et c'est quoi l'avantage ? plus rapide quand c'est en place .
tu gère plus facilement les événements mouse over out

si tu veux un exemple donne moi la taille que doivent faire tes fonds hauteur largeur position en x et y selon ton ex tu avais 4 a 5 boutons a faire.

@+gustave02

#8 lukas

    Ceinture Jaune

  • Members
  • PipPip
  • 28 messages

Posté 15 May 2015 - 14:03 PM

Gustave02,

Merci pour l'infos, je ne me ferais pas avoir une deuxième fois !

Concernant les bouton,

le 1er : (position en x :425, position en Y: 0, Longeur: 225, largeur: 120)
et ensuite je decale de 120 pixel pour chaque bouton .

le 2eme : (position en x :545, position en Y: 0, Longeur: 225, largeur: 120)
le 3eme : (position en x :425, position en Y: 0, Longeur: 225, largeur: 120)
le 4eme : (position en x :665, position en Y: 0, Longeur: 225, largeur: 120)
le 5eme: (position en x :785, position en Y: 0, Longeur: 225, largeur: 120)

il faudra surement ajuster les textes, mais ça c'est de mon niveau :roll:
Merci pour ton aide !!!

#9 lukas

    Ceinture Jaune

  • Members
  • PipPip
  • 28 messages

Posté 15 May 2015 - 15:19 PM

pardon c'est un décalage de 225 pixels et pas 120, mais ce n'est pas grave c'est juste pour l'exemple

#10 gustave02

    Ceinture Marron

  • Members
  • PipPipPipPipPipPip
  • 166 messages

Posté 15 May 2015 - 15:24 PM

j'ai fait un exemple t'auras plus qu' a modifier a partir de ton projet.
http://www.citroen-f...lukas/lukas.rar

j'explique dans une autre reponse pour tous.

Fichier(s) joint(s)



#11 gustave02

    Ceinture Marron

  • Members
  • PipPipPipPipPipPip
  • 166 messages

Posté 15 May 2015 - 15:35 PM

donc le code
partie 1


import flash.display.Bitmap;
import Bouton; // ca c'est la class qui va gérer les boutons comme c'est une class B majuscule par convention

stage.displayState = StageDisplayState.FULL_SCREEN;// c'est toi
stop(); // ok
//----------------------Mise en scene------------------------------------------------//
var fond:Bitmap = new Bitmap(new Fond());// j'ai changer les nom de class avec des majuscules
fond.width = 1920;// car l'image d'origine et de 1900 peut etre il serait mieux de modifier l'origine
fond.y = -100;// tu place ton image de fond j'ai viré fond.x = 0; car c'est comme ça que ça va être par défaut.
addChild(fond);// l'image de fond sur la scene
//////////////////////////////////////////////////////////////////////////////////////                             ok?
var logo:Bitmap = new Bitmap(new Logo());// ton logo bien j'ai modifier les noms de class majuscule
logo.x = 200;// place sur axe x
addChild(logo); //sur la scene
///////////////////////////////////////////////////////////////////////////////////////////
var tab:Array = new Array("PLS","Carroussel","TensDolly","Winch");// la je fais un tableau dans lequel je place les nom des boutons
///
for(var n:uint = 0; n < tab.length; n++){// une boucle qui créer les boutons et les places
var bouton:Bouton = new Bouton(tab[n]); // bouton est un nouveau Bouton qui a le texte "PLS"
///ici tu peux lui donner un nom et un ecouteur bouton.name =   et bouton.addEventListener.....
bouton.x = 425 + (n*225); ///position en x
addChild(bouton); ///pose sur la scene
}
 

ok pour cette partie?
on voit le fichier de la class?

#12 gustave02

    Ceinture Marron

  • Members
  • PipPipPipPipPipPip
  • 166 messages

Posté 15 May 2015 - 15:45 PM

la suite le fichier de la class Bouton


package {
import flash.display.Sprite;
import flash.display.Shape;
import flash.text.TextFormat;
import flash.text.TextFormatAlign;
import flash.text.TextField;
import flash.display.SimpleButton;

public class Bouton extends Sprite {
           
  public function Bouton( texte:String ) {  
               
   var format:TextFormat = new TextFormat(); // format pourles champs detexte
                    format.align = TextFormatAlign.CENTER;
                    format.color = 0xFFFFFF;
                    format.font = "Book Antiqua";
                    format.size = 15;
               
   //////////////////////////////////////////////////////////////////////
   var repos:Sprite = new Sprite();// ce que le bouton sera au repos
   var reposFond:Shape = new Shape(); // le fond au repos
   reposFond.graphics.beginFill(0x666666);
   reposFond.graphics.drawRect(0, 0, 225, 120);
   reposFond.graphics.endFill();
   repos.addChild(reposFond);
               
   var reposTexte:TextField = new TextField (); // le texte au repos
                    reposTexte.width = 225;
   reposTexte.height = 20;
   reposTexte.y = 50;
                    reposTexte.defaultTextFormat = format ;
                    reposTexte.text = texte;
   repos.addChild(reposTexte);
   /////////////////////////////////////////////////////////////////////////
   var survol:Sprite = new Sprite();// ce que sera le bouton au survol
               
                    format.color = 0x000000;
               
   var survolFond:Shape = new Shape();
   survolFond.graphics.beginFill(0xFFFFFF);
   survolFond.graphics.drawRect(0, 0, 225, 120);
   survolFond.graphics.endFill();
   survol.addChild(survolFond);
               
   var survolTexte:TextField = new TextField ();
                    survolTexte.width = 225;
   survolTexte.height = 20;
   survolTexte.y = 50;
                    survolTexte.defaultTextFormat = format ;
                    survolTexte.text = texte;
   survol.addChild(survolTexte);
   //////////////////////////////////////////////////////////////////////////
   var clic:Sprite = new Sprite();// ce que sera le bouton au clic
               
                    format.size = 14;
               
   var clicTexte:TextField = new TextField ();
                                                                   
   clicTexte.width = 225;
   clicTexte.height = 20;
   clicTexte.y = 50;
   clicTexte.defaultTextFormat = format ;
                    clicTexte.text = texte;
   clic.addChild(clicTexte);
   /// voila le bouton  et les trois clip selon sont etat      
   var bouton:SimpleButton = new SimpleButton(repos, survol, clic, repos);//
   addChild (bouton);
  }
}
}
 

tu modifies les sprites repos survol clic selon ton designe.

ok?
@+gustave02

#13 lukas

    Ceinture Jaune

  • Members
  • PipPip
  • 28 messages

Posté 15 May 2015 - 16:07 PM

Cool, ça marche super bien en plus tu as optimiser le code .
Dit moi c'est quoi l'avantage d'utiliser des class ( comme la class bouton que tu as crée) par rapport a tout mettre dans un seul fla ?

De mon coté j'ai continuer a bosser sur ma version ( mais je vais reporter les modifs sur la tiennes) et en dessous des bouton je voulais faire apparaitre un sous menu, qui contiendra des liens pour aller sur d'autre frame .

Par contre comme je fait ecouteurs de type Mouse_OUT sur le sprite (ou bouton dans ton cas) mon menu disparaît du coup je fait en ecouteur de type Mouse_Over sur mon sous menu et cela fonctionne . Par contre si je passe du sous menu (GrandCarGris) au Sprite(CarGris) ça bug tu as une idée ?

Fichier(s) joint(s)

  • Fichier joint  Main.fla   5.47 Mo   22 téléchargement(s)


#14 lukas

    Ceinture Jaune

  • Members
  • PipPip
  • 28 messages

Posté 15 May 2015 - 16:08 PM

En tout merci pour ton aide, c'est sympas !!!!!!!!!!!!!!!

#15 gustave02

    Ceinture Marron

  • Members
  • PipPipPipPipPipPip
  • 166 messages

Posté 15 May 2015 - 16:20 PM

tu dis "Dit moi c'est quoi l'avantage d'utiliser des class ( comme la class bouton que tu as crée) par rapport a tout mettre dans un seul fla ?"

tu divise ton code en cas de gros projet c'est plus lisible. je veux changer les boutons je vais dans le fichier class bouton.as
j'aurais pu créer un dossier exemple decors ou j'aurais pu placer mon fichier bouton et tout les fichier de class qui servirait a créer le decors

je matte ton fla

pas vu de difference!!!!!!!!!!!!!!!!!!!

@+ gustave02

#16 lukas

    Ceinture Jaune

  • Members
  • PipPip
  • 28 messages

Posté 15 May 2015 - 16:48 PM

ha bon ? J'ai peut etre envoyé l'ancienne version ... sur la nouvelle j'ai du crée un nouveau Sprite "GrandRecGris" (ce sera mon menu pour la partie PLS) et j'ai crée les ecouteurs d’événements

GrandRecGris.addEventListener(MouseEvent.MOUSE_OUT, RecGrisOut);
GrandRecGris.addEventListener(MouseEvent.MOUSE_OVER, TxtCouleur);

//------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------//

var Txt_couleur:TextField = new TextField();
var formatcouleur:TextFormat = new TextFormat();

formatcouleur.font = "Arial";
formatcouleur.color = 0x1979BB;
formatcouleur.size = 15;
formatcouleur.bold = true;

Txt_couleur.defaultTextFormat = formatcouleur;
Txt_couleur.x = 525;
Txt_couleur.y = 80;
Txt_couleur.autoSize = TextFieldAutoSize.LEFT;
Txt_couleur.selectable = false;
Txt_couleur.text = "PLS";

var recGris:Sprite = new Sprite ()
recGris.graphics.beginFill(0xF3F3F3);
recGris.graphics.drawRect(425, 0, 225, 120);

var GrandRecGris:Sprite = new Sprite ()
GrandRecGris.graphics.beginFill(0xF3F3F3);
GrandRecGris.graphics.drawRect(425, 120, 900, 400);


Txt_PLS.addEventListener(MouseEvent.MOUSE_OVER, TxtCouleur);
GrandRecGris.addEventListener(MouseEvent.MOUSE_OVER, TxtCouleur);

function TxtCouleur(event:MouseEvent):void {

addChild(recGris);
addChild(GrandRecGris);
addChild(Txt_couleur);
removeChild(Txt_PLS);

}

recGris.addEventListener(MouseEvent.MOUSE_OUT, RecGrisOut);
GrandRecGris.addEventListener(MouseEvent.MOUSE_OUT, RecGrisOut);

function RecGrisOut(event:MouseEvent):void {

removeChild(recGris);
removeChild(GrandRecGris);
removeChild(Txt_couleur);
addChild(Txt_PLS);

#17 Monsieur Spi

  • Community Manager
  • PipPipPipPipPipPipPipPip
  • 6954 messages

Posté 15 May 2015 - 16:59 PM

Hello,

Je m’immisce sur quelques points :)

import Bouton;

Tu n'as pas besoin d'importer une classe qui se trouve à la racine du projet (même niveau que le FLA).

stop();
Ça n'augure rien de bon dans le code ça..... ;)


var fond:Bitmap = new Bitmap(new Fond());
[...]
var logo:Bitmap = new Bitmap(new Logo());
 

Pourquoi ne pas faire directement des Bitmaps depuis les classes Fond et Logo plutôt que de transtyper à la création de l'objet ?

#18 lukas

    Ceinture Jaune

  • Members
  • PipPip
  • 28 messages

Posté 15 May 2015 - 17:04 PM

Bonjour Spi,

Concernant l'instruction stop(), je l'ai taper car j'ai l'intention de faire des gotoandStop vers d'autres frame .
Pour les bitmaps je ne comprends pas tres bien

#19 Monsieur Spi

  • Community Manager
  • PipPipPipPipPipPipPipPip
  • 6954 messages

Posté 15 May 2015 - 17:10 PM

Citation

des gotoandStop vers d'autres frame .

Mélanger code et timeline => pas bon :)

Citation

Pour les bitmaps je ne comprends pas tres bien

Pourquoi cette ligne :

var fond:Bitmap = new Bitmap(new Fond());

Tu crée un bitmap que tu nomme "fond".
Première question, pourquoi as-tu besoin spécifiquement d'un bitmap ?

Puis tu utilise l'instruction "new Bitmap", à laquelle tu passe un objet "new Fond()".
Pourquoi l'objet "Fond()" ne serait pas directement un bitmap ?
Dans ce cas tu pourrais faire :
var fond:Bitmap = new Fond();
Ou mieux :
var fond:Fond = new Fond();
Et si tu n'as pas spécifiquement besoin d'un bitmap tu peux créer l'objet du type que tu veux (Sprite, MovieClip, Shape, ....).

#20 gustave02

    Ceinture Marron

  • Members
  • PipPipPipPipPipPip
  • 166 messages

Posté 15 May 2015 - 17:16 PM

bonjour Monsieur Spi

logo et fond sont des jpg dans la bibliotheque.

Tu n'as pas besoin d'importer une classe qui se trouve à la racine du projet (même niveau que le FLA).
oui mais come j' ai dis dans l'exemple ont aurait pu le mettre dans un dossier pour ameliorer le rangement.
donc j'ai mis l'appel si dossier
import nomDuDossier.Bouton;

#21 lukas

    Ceinture Jaune

  • Members
  • PipPip
  • 28 messages

Posté 15 May 2015 - 17:32 PM

Monsieur Spi,

En faite la page dispo actuellement dans le fla c'est la page principale, en passant avec la souris sur les differents chapitre un sous menu s'ouvrira avec des tutos sélectionnable ( Pour la plupart des fichier video et pour les autres des SWF ) .
Pour les goToAndStop, visiblement c'est une mauvaise idées tu préconise quoi ?

#22 lukas

    Ceinture Jaune

  • Members
  • PipPip
  • 28 messages

Posté 17 May 2015 - 16:13 PM

gustave02,


J'aimerai crée des ecouteures d'evenement sur les bouton que tu as crée avec la boucle .
Comment puis je faire sachant qu'ils n'ont pas de nom d'instance ?

#23 gustave02

    Ceinture Marron

  • Members
  • PipPipPipPipPipPip
  • 166 messages

Posté 17 May 2015 - 18:23 PM

bonjour
je croyais que monsieur Spi prenait le relais
tu dis
"J'aimerai crée des ecouteures d'evenement sur les bouton que tu as crée avec la boucle .
Comment puis je faire sachant qu'ils n'ont pas de nom d'instance ?"



import flash.display.Bitmap;
import Bouton;// je le note c'est pour faire voir que c'est une class externe
import flash.events.MouseEvent;
   
stage.displayState = StageDisplayState.FULL_SCREEN;
stop();

//----------------------------------------------------------------------------Mise en scene-------------------------------------------------------------------------------------------------//

var fond:Bitmap = new Bitmap(new Fond());
fond.width = 1920;
fond.y = -100;
addChild(fond);


var logo:Bitmap = new Bitmap(new Logo());
logo.x = 200;
addChild(logo);

var tab:Array = new Array("PLS","Carroussel","TensDolly","Winch");

for(var n:uint = 0; n < tab.length; n++){
    var bouton:Bouton = new Bouton(tab[n]);
    bouton.x = 425 + (n*225);
    bouton.name = "bouton"+n;
    bouton.addEventListener(MouseEvent.CLICK, this["bt"+n]);
    addChild(bouton);
}

function bt0(event:MouseEvent):void{
    trace("ok0");
}
function bt1(event:MouseEvent):void{
    trace("ok1");
}
function bt2(event:MouseEvent):void{
    trace("ok2");
}
function bt3(event:MouseEvent):void{
    trace("ok3");
}
 

@+gustave02

ps je ne serais pas dispo la semaine prochaine

#24 lukas

    Ceinture Jaune

  • Members
  • PipPip
  • 28 messages

Posté 17 May 2015 - 18:50 PM

Ouha Genial !!!!

Tu as une astuce pour vérifier si la souris est au dessus d'un bouton ?
En faite j'aimerai afficher un objet graphique supplémentaire sur la scene si je suis au dessus du bouton "PLS" , un autre si je suis au dessus du bouton "CARROUSSEL" etc ... et si je suis en dessus de cette objet graphique, la fonction Mouse_over du bouton est toujours executé, c'est possible ça ?

#25 lukas

    Ceinture Jaune

  • Members
  • PipPip
  • 28 messages

Posté 17 May 2015 - 18:57 PM

ha, j'y suis aller un peu vite, j'ai un defaut sur la derniere modif, visiblement il n'aime pas cette instruction :

bouton.addEventListener(MouseEvent.CLICK, this["bt"+n]);

#26 gustave02

    Ceinture Marron

  • Members
  • PipPipPipPipPipPip
  • 166 messages

Posté 17 May 2015 - 19:40 PM

c'est quoi ton message erreur car moi ca marche

#27 gustave02

    Ceinture Marron

  • Members
  • PipPipPipPipPipPip
  • 166 messages

Posté 17 May 2015 - 19:43 PM

tu demande
En faite j'aimerai afficher un objet graphique supplémentaire sur la scene si je suis au dessus du bouton "PLS" , un autre si je suis au dessus du bouton "CARROUSSEL" etc ... et si je suis en dessus de cette objet graphique, la fonction Mouse_over du bouton est toujours executé, c'est possible ça ?

quel objet et ou

#28 gustave02

    Ceinture Marron

  • Members
  • PipPipPipPipPipPip
  • 166 messages

Posté 17 May 2015 - 20:09 PM

http://www.citroen-f...lukas/lukas.rar

#29 lukas

    Ceinture Jaune

  • Members
  • PipPip
  • 28 messages

Posté 17 May 2015 - 20:16 PM

gustave02


voici mon message d'erreur :

Error #2007: Parameter listener must be non-null.
at flash.events::EventDispatcher/addEventListener()
at Main_fla::MainTimeline/frame1()[Main_fla.MainTimeline::frame1:35]

Concernant les objet ce serais des rectangles contenant des textes ( des sous menu ) juste en dessous des bouton

#30 gustave02

    Ceinture Marron

  • Members
  • PipPipPipPipPipPip
  • 166 messages

Posté 17 May 2015 - 20:17 PM

envois ton fla

#31 lukas

    Ceinture Jaune

  • Members
  • PipPip
  • 28 messages

Posté 17 May 2015 - 20:27 PM

gustave02,

Visiblement le probleme vient de l'array, j'ai rajouté un 5ieme element et c'est ça qui fait bugger l'appli .Par contre avec 4 elements pas de soucis c'est pour cela que toi ça fonctionne .

#32 lukas

    Ceinture Jaune

  • Members
  • PipPip
  • 28 messages

Posté 17 May 2015 - 20:40 PM

Voici le fla avec la class bouton

Miniature(s) jointe(s)

  • Image attachée: exemple de sous menu.png

Fichier(s) joint(s)

  • Fichier joint  Main.fla   5.47 Mo   19 téléchargement(s)
  • Fichier joint  Bouton.as   2.31 Ko   21 téléchargement(s)


#33 lukas

    Ceinture Jaune

  • Members
  • PipPip
  • 28 messages

Posté 17 May 2015 - 20:44 PM

J'ai mis ton script en "//", et concernant le l'objet graphique que j'aimerai afficher j'ai fait un p'tit truc sur paint, peux tu me dire si c'est possible de garder l'etat du bouton Mouse_Over quand le pointeur de la souris passe sur le sous menu (car sur un mouse_Out le bouton recupere son etat par defaut) ? du coup le bouton recuper son etat d'origine sur un mouse_Out du bouton OU du sous menu .

en tout cas gros merci pour ton temps !!!

#34 gustave02

    Ceinture Marron

  • Members
  • PipPipPipPipPipPip
  • 166 messages

Posté 17 May 2015 - 20:58 PM

ok
faut que tu comprenne le script.



for(var n:uint = 0; n < tab.length; n++){// on créer les boton selon le contenu du tableau
    var bouton:Bouton = new Bouton(tab[n]); //on créer avec le texte
    bouton.x = 425 + (n*225);// on le place
    bouton.name = "bouton"+n;// on lui donne un nom ca peut servir peut etre
    bouton.addEventListener(MouseEvent.CLICK, this["bt"+n]);// on lui ajoute un ecouteur qui declenche une fonction
 ///si n = 0  c'est la function bt0(); si ton tableau a 5 bouton n = 4 au max et appel la fonction bt4();
// donc a toi de creer la fonction bt4(); puisse que tu a un bouton de plus que mon projet
/// ok?
    addChild(bouton);
}
function bt0(event:MouseEvent):void{
    trace("ok0");
}
function bt1(event:MouseEvent):void{
    trace("ok1");
}
function bt2(event:MouseEvent):void{
    trace("ok2");
}
function bt3(event:MouseEvent):void{
    trace("ok3");
}
 


#35 lukas

    Ceinture Jaune

  • Members
  • PipPip
  • 28 messages

Posté 17 May 2015 - 21:12 PM

ha j'ai compris, avec l'instruction

bouton.addEventListener(MouseEvent.CLICK, this["bt"+n]);

j'ai crée 5 fonctions ( function bt0,bt1,bt2,bt3 et bt4 car j'ai crée une 5ieme element dans l'array) et le defaut apparait car la function Bt4 n'existe pas, il faut la rajouter !

#36 gustave02

    Ceinture Marron

  • Members
  • PipPipPipPipPipPip
  • 166 messages

Posté 17 May 2015 - 21:37 PM

oui

#37 lukas

    Ceinture Jaune

  • Members
  • PipPip
  • 28 messages

Posté 17 May 2015 - 22:00 PM

Ok super, et bien moi tu as une astuce pour mon sous menu ?

#38 gustave02

    Ceinture Marron

  • Members
  • PipPipPipPipPipPip
  • 166 messages

Posté 17 May 2015 - 22:16 PM

euh je regarde

#39 lukas

    Ceinture Jaune

  • Members
  • PipPip
  • 28 messages

Posté 17 May 2015 - 22:16 PM

je tape un peu trop vite ... je corrige :

Ok super, dit moi tu as une astuce pour mon sous menu ?

#40 gustave02

    Ceinture Marron

  • Members
  • PipPipPipPipPipPip
  • 166 messages

Posté 17 May 2015 - 22:39 PM

http://www.citroen-f...lukas/lukas.rar

vois j'ai fait des modifs sur le fichier bouton.as
as toi de l'adapter a ton projet.

ok?
@+gustave02

#41 lukas

    Ceinture Jaune

  • Members
  • PipPip
  • 28 messages

Posté 17 May 2015 - 22:49 PM

gustave02

C'est presque bon, car il y a un message d'erreur si tu passe avec le pointeur de la souris sur le bouton "PLS", puis sur le sous-menu puis tu reviens sur le bouton "pls" et enfin sur le bouton "carroussel" a ce moment j'ai ce message d'erreur :

#2025: The supplied DisplayObject must be a child of the caller.
at flash.display::DisplayObjectContainer/removeChild()
at Bouton/vire()[C:\Users\Yakub\Desktop\v3\Bouton.as:95]

on dirais le meme defaut que j'avais sur la premiere version avec les Sprite .

#42 gustave02

    Ceinture Marron

  • Members
  • PipPipPipPipPipPip
  • 166 messages

Posté 17 May 2015 - 23:03 PM

ok une variante

http://www.citroen-f...lukas/lukas.rar

@+gustave02

de retour vendredi prochain

#43 lukas

    Ceinture Jaune

  • Members
  • PipPip
  • 28 messages

Posté 17 May 2015 - 23:25 PM

C'est un peu compliqué pour moi :) ... ok ça me laisse jusqu’à vendredi pour comprendre ce que tu as fait

Merci en tout cas !!!!

#44 lukas

    Ceinture Jaune

  • Members
  • PipPip
  • 28 messages

Posté 26 August 2015 - 21:30 PM

Bonjourt Gustave02,

Je reviens vers toi car j'ai une question sur le script que tu m'as fait la derniere fois, j'espere que tu pourrais m'aider la dessus, car le fait d'avoir fait une boucle for pour crée 5 objets de types "Bouton" ne m’arrange pas pour rentrer dans le menu.
Voici le Script :

import flash.events.MouseEvent;
import flash.display.Bitmap;
import Bouton;

stage.displayState = StageDisplayState.FULL_SCREEN;

//----------------------------------------------------------------------------Mise en scene-------------------------------------------------------------------------------------------------//
var accesLevel = "Operateur";
var fond:Bitmap = new Bitmap(new Fond());
fond.width = 1920;
fond.y = -100;
addChild(fond);

var logo:Bitmap = new Bitmap(new Logo());
logo.x = 200;
addChild(logo);

var recBlanc1:Shape = new Shape ();
recBlanc1.graphics.beginFill(0xFFFFFF);
recBlanc1.graphics.drawRect(0, 0, 195, 120);
this.addChild(recBlanc1);

var recBlanc2:Shape = new Shape ();
recBlanc2.graphics.beginFill(0xFFFFFF);
recBlanc2.graphics.drawRect(425, 0, 1495, 120);
this.addChild(recBlanc2);

var tab:Array = new Array("PLS","CARROUSSEL","TENSIONEURS","DOLLYBASES","WINCHES");

for(var n:uint = 0; n < tab.length; n++){
var bouton:Bouton = new Bouton(tab[n]);
bouton.x = 425 + (n*295);
bouton.name = "bouton"+n;
bouton.addEventListener(MouseEvent.MOUSE_OVER, this["bt"+n]);
bouton.addEventListener(MouseEvent.CLICK,this["Menu"+n]);
addChild(bouton);
}

function bt0(event:MouseEvent):void{
trace("Sous menu PLS");
}
function bt1(event:MouseEvent):void{
trace("Sous menu Carroussel");
}
function bt2(event:MouseEvent):void{
trace("Sous menu Tensionneurs");
}
function bt3(event:MouseEvent):void{
trace("Sous menu DollyBases");
}
function bt4(event:MouseEvent):void{
trace("Sous menu Winches");
}

function Menu0(event:MouseEvent):void{
removeChild(fond);
removeChild(logo);
}
function Menu1(event:MouseEvent):void{
removeChild(fond);
removeChild(logo);
}
function Menu2(event:MouseEvent):void{
removeChild(fond);
removeChild(logo);
}
function Menu3(event:MouseEvent):void{
removeChild(fond);
removeChild(logo);
}
function Menu4(event:MouseEvent):void{
removeChild(fond);
removeChild(logo);
}

Ma question est comment je fait pour enlever l'affichage des 5 boutons si je click sur l'un d'eux ?
Je n'arrive pas a retrouver le nom de leurs instances car a la fin de la boucle tu fais un addChild(Bouton) ( j'ai tenté de faire un removeChild(Bouton0); mais ça ne marche pas ) .
As tu une idée comment faire ?

Merci

#45 Monsieur Spi

  • Community Manager
  • PipPipPipPipPipPipPipPip
  • 6954 messages

Posté 27 August 2015 - 18:23 PM

Salut,

1 - ajouter un nouveau tableau de stockage pour les boutons

var stockBoutons = [];

2 - lors de la boucle de création des boutons, ajouter chaque bouton au tableau de stockage

for(var n:uint = 0; n < tab.length; n++){
    var bouton:Bouton = new Bouton(tab[n]);
    // ton code ...
    stockBoutons.push(bouton);
}

3 - maintenant que tous les boutons sont rangés dans un tableau, on peut jouer avec...

3.1 - on crée une nouvelle fonction qui a pour but de masquer tous les boutons sauf celui sur lequel on vient de cliquer

function afficheBouton(e:MouseEvent):void{
    var boutonClique = e.target;                    // le bouton concerné par le clic
    for(var i:int= 0; i<stockBoutons.length; i++){    // parcours la liste des boutons
        if(stockBoutons[i]!=boutonClique){            // si les boutons sont différents
            stockBoutons[i].alpha=0;                // le bouton trouvé par la boucle est transparent
        }
    }
}

3.2 - reste à ajouter un écouteur à tous les boutons


for(var n:uint = 0; n < tab.length; n++){
    var bouton:Bouton = new Bouton(tab[n]);
    // ton code ...
    stockBoutons.push(bouton);
    bouton.addEventListener(MouseEvent.CLICK, afficheBouton);
}
 





Répondre à ce sujet



  

1 utilisateur(s) li(sen)t ce sujet

0 membre(s), 1 invité(s), 0 utilisateur(s) anonyme(s)

authorised training centre

Centre de Formation Mediabox - Adobe et Apple Authorised Training Center.

Déclaré auprès de la Direction du Travail et de la Formation Professionnelle

Mediabox : SARL au capital de 62.000€ - Numéro d'activité : 11 75 44555 75 - SIRET : 49371646800035

MEDIABOX, 23, rue de Bruxelles, 75009 PARIS

FFP