Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2524 connectés 

  FORUM HardWare.fr
  Programmation
  Flash/ActionScript

  Evenement inconnu sur un bouton ?

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Evenement inconnu sur un bouton ?

n°1632193
ijk_refere​nce
Posté le 27-10-2007 à 21:54:14  profilanswer
 

Bonjour,
 
Je cherche a recréer une classe bouton en AS3 car je la voudrais plus ou moins animée...
 
Seulement si j'arrive à intercepter les événements pour le survole et le clique de la souris, il y en a un spécial qui m’échappe complètement :
 
Par exemple avec un simple bouton (voir code ci dessous) en plaçant la curseur sur le bouton et en enfonçant la souris (et en restant enfoncer) on peut trimballer le curseur sur tout l’écran et le bouton a toujours sa couleur de recouvrement.
 
Jusque là j'arrive à reproduire... sauf ceci :
 
La souris toujours enfoncé, je place le curseur en dehors de la fenêtre de Flash et là je relâche la souris. Aussitôt le bouton reprend sa couleur de base. Je n’arrive pas à émuler cet événement !
 
Tous les essais de Bouton extension de Sprite font que je n‘ai plus aucun événement émanant de mon bouton dès que je sors de sa zone même avec la souris enfoncée.
 
Il y a sûrement un truc tout con, genre une propriété à initialiser. En tout cas je ne pense pas qu’il faille de bidouille car la classe SimpleButton fonctionne très bien même en bougeant le curseur en dehors de la fenêtre du logiciel Flash.
 
Connaissez vous la solution ?
 
Merki beauku !
 

Code :
  1. package
  2. {
  3.  import flash.display.*;
  4.  public class Test extends Sprite
  5.  {
  6.   public function Test()
  7.   {
  8.    var myButton:SimpleButton = new SimpleButton();
  9.    myButton.upState = createSpriteRect(32,32,64,32, 0xFF0000);
  10.    myButton.overState = createSpriteRect(32,32,64,32, 0x00FF00);
  11.    myButton.downState = createSpriteRect(32,32,64,32, 0x0000FF);
  12.    myButton.hitTestState = createSpriteRect(32,32,64,32, 0xFF00FF);
  13.    this.addChild(myButton);
  14.   }
  15.   private function createSpriteRect(x:int, y:int, w:int, h:int, color:int):Sprite
  16.   {
  17.    var sprite:Sprite = new Sprite();
  18.    sprite.graphics.lineStyle(2, 0x202020);
  19.    sprite.graphics.beginFill(color);
  20.    sprite.graphics.drawRect(x, y, w, h);
  21.    return sprite;
  22.   }
  23.  }
  24. }

mood
Publicité
Posté le 27-10-2007 à 21:54:14  profilanswer
 

n°1633285
ijk_refere​nce
Posté le 29-10-2007 à 20:52:49  profilanswer
 

Bon bah j'ai réussi tout seul :D  
 
J'ai réussi à récupérer l’événement du retour-de-click qui fait défaut lorqu'il est dévié.
 
Comme ça ma classe Bouton fonctionne exactement comme les vrais-boutons  :na:
 
Si cela intéresse quelqu’un...
 
J'ai constaté que le retour-de-click-dévié n'est intercepté que par la classe Stage  
 
Pourquoi ? ça j'en sais rien !
 
Donc il suffit de faire en sorte que l'évènement MOUSE_UP de ma classe soit pris en compte par le stage.
 
Voici le code-source pour comprendre (pour l'exemple mon bouton est plus que rudimentaire) :
 

Code :
  1. package
  2. {
  3. import flash.display.*;
  4. import flash.events.*;
  5. public class MySimpleButton extends Sprite
  6. {
  7.  private var _focused:Boolean = false;
  8.  private var _pushed:Boolean = false;
  9.  public function MySimpleButton()
  10.  {
  11.   _draw();
  12.   addEventListener(Event.ADDED, initEvents);
  13.  }
  14.  private function initEvents(e:Event):void
  15.  {
  16.   if(stage!=null)
  17.   {
  18.    addEventListener(MouseEvent.MOUSE_OVER, _mouseOver);
  19.    addEventListener(MouseEvent.MOUSE_OUT, _mouseOut);
  20.    addEventListener(MouseEvent.MOUSE_DOWN, _mouseDown);
  21.    stage.addEventListener(MouseEvent.MOUSE_UP, _mouseUp);
  22.   }
  23.   else
  24.   {
  25.    var ancienter:DisplayObjectContainer = parent;
  26.    while(ancienter.parent!=null) ancienter = ancienter.parent;
  27.    ancienter.addEventListener(Event.ADDED, initEvents);
  28.   }
  29.  }
  30.  protected function _draw():void
  31.  {
  32.   var f:int = _focused? 0xFF0000 : 0;
  33.   var p:int = _pushed? 0x00FF00 : 0;
  34.   graphics.clear();
  35.   graphics.beginFill(f+p);
  36.   graphics.drawRect(0,0,128,32);
  37.   graphics.endFill();
  38.  }
  39.     private function _mouseOut(e:MouseEvent):void
  40.     {
  41.      _focused = false;
  42.      _draw();
  43.     }
  44.    
  45.     private function _mouseOver(e:MouseEvent):void
  46.     {
  47.      _focused = true;
  48.      _draw();
  49.     }
  50.     private function _mouseDown(e:MouseEvent):void
  51.     {
  52.      _pushed = true;
  53.      _draw();
  54.     }
  55.    
  56.     private function _mouseUp(e:MouseEvent):void
  57.     {
  58.      if(_pushed==true)
  59.      {
  60.          _pushed = false;
  61.       _draw();
  62.      }
  63.     }    
  64. }
  65. }


 
 
Note : pour l'attachement/détachement au stage... il y a encore des améliorations à faire.
 
 
 :hello:

n°1633348
antika
Posté le 29-10-2007 à 22:52:04  profilanswer
 

euh, c'est pas nécessaire de poster ce genre de code, t'as un peu inventé l'eau tiède là :-/
 

n°1634266
ijk_refere​nce
Posté le 31-10-2007 à 01:41:01  profilanswer
 

antika a écrit :

euh, c'est pas nécessaire de poster ce genre de code, t'as un peu inventé l'eau tiède là :-/


 
Il me semblait être sur un forum d’entraide !
 
Tout le monde n’a pas forcement Bac + 8 en Flash comme toi  
 
Je pars du principe qu’une personne doit s’intéresser au sujet si elle tombe ici.
 
Si elle cherche une solution,  il y aura au moins la mienne accessible au novice.
 
Autrement si le sujet et trop bateau pour elle… pourquoi viendrait-elle le dire !?
 
 
En tout cas pour moi, il y avait quelque chose à montrer ici.
 
Car sur d’autres langages l’événement type Mouse_Up est correctement intercepté.  
 
P’tit Bug Flash ou pas encore assez approfondi Flash !
 
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Flash/ActionScript

  Evenement inconnu sur un bouton ?

 

Sujets relatifs
requete affiche un bouton AouB dans un array qui verifi a chaque ligneclic unique sur bouton dans page html
Icône à la place d'un boutonUserform - Confusion événement Change/Click
Passer un évènement en paramètre de fonctionComment faire deux evenement avec un seul lien hypertexte?
Pb formulaire avec bouton radioclasse dans un meme package mais inconnu
Récuperer nom bouton feuille excelbouton lecture avec temporisation
Plus de sujets relatifs à : Evenement inconnu sur un bouton ?


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR