IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Flash Discussion :

[FLASH MX2004] Problème de onMouseUp


Sujet :

Flash

  1. #1
    Membre confirmé Avatar de NeoMan
    Profil pro
    Inscrit en
    Avril 2002
    Messages
    171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2002
    Messages : 171
    Par défaut [FLASH MX2004] Problème de onMouseUp
    Bonjour à tous!

    Je génère dynamiquement des MovieClip et je leur applique une procédure à leur évènement onMouseUp. Le problème c'est que tous les MovieClip réagissent au clic...
    Voici un résumé des différents codes :
    Hexagone.as
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
    class Hexagone {
    	static var COUNTER:Number=0;
    	private var _id:Number;
    	private var _canvas:MovieClip;
    	private var _owner:MovieClip;
     
    	public function Hexagone(aOwner:MovieClip, aX:Number, aY:Number) {
    		this._id = ++Hexagone.COUNTER;
    		this._owner = aOwner;
    		this._canvas = this._owner.createEmptyMovieClip("hexagone" + this._id, this._owner.getNextHighestDepth());
    		this._canvas.onMouseUp = this.onMouseUp;
    		this._couleur = new Color(this._canvas);
    		this.setPosition(aX, aY);
    		this.draw();
    	}
     
    	public function onMouseUp():Void {trace(this._id);};
    }
    MapHexagone.as
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
     
    class MapHexagone {
    	static var COUNTER=0;
    	private var _id:Number;
    	private var _owner:MovieClip;
    	private var _canvas:MovieClip;
    	private var _cases:Array;
    	private var _nbColonnes:Number;
    	private var _nbLignes:Number;
    	private var _taille:Number;
     
    	private var _buffCoucheHexa:Array;
     
    	private function init() {
    		var i:Number;
    		var j:Number;
    		var tmp:Array;
     
    		this._id=++MapHexagone.COUNTER;
    		this._canvas = this._owner.createEmptyMovieClip("mapHexagone" + this._id, this._owner.getDepth());
    		for(i=0; i<this._nbColonnes; i++) {
    			tmp = new Array();
    			for(j=0; j<this._nbLignes; j++) tmp.push(null);
    			this._cases.push(tmp);
    			tmp=null;
    		}
     
    		for(i=0; i<this._nbColonnes; i++)
    			for(j=0; j<this._nbLignes; j++)
    				this.createCase(i, j);
    	}
     
    	private function createCase(aColonne:Number, aLigne:Number) {
    		var x:Number;
    		var y:Number;
    		...
    		this._cases[aColonne][aLigne]=new Hexagone(this._canvas, x, y);
    	}
     
    	public function MapHexagone(aOwner:MovieClip, aTaille:Number) {
     
    		this._owner=aOwner;
    		this._type=aType;
    		this._taille=aTaille;
    		this.init();
    	}
    }
    Utilisation
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    import MapHexagone;
    var mapHex:MapHexagone = new MapHexagone(_root, 32);
    En plus du fait que tous les MovieClp réagissent aux clic, l'instruction trace(this._id); retourne undefined...

    Quelqu'un peut-il m'aider à comprendre ??
    merci d'avance!

    @++

    NeoMan

  2. #2
    Membre averti
    Inscrit en
    Septembre 2005
    Messages
    46
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 46
    Par défaut
    je voudrais pas dire de bétises, mais je crois bien que onMouseUp réagit quand tu enlève le doigt de la souris, sans se poser de question pour savoir si tu cliquais sur le clip, à côté, bref, partout dans la scène.
    Du coup forcément tous tes clips réagissent en même temps

    Tu peux ptet plutôt essayer avec une gestion d'event, genre on(click) ou des écouteurs.

  3. #3
    Membre confirmé Avatar de NeoMan
    Profil pro
    Inscrit en
    Avril 2002
    Messages
    171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2002
    Messages : 171
    Par défaut
    D'après les exemples de codes que j'ai pu avoir, il semblerait que les évènements onMouseUp, onMouseDown et onMouseMouse soient bien liés au MovieClip. De plus, ça parait étonnant, il n'y a pas de onClick dans la classe MovieClip. et j'ai essayé de faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    this._canvas.on(click) = this.onMouseUp;
    Mais évidement ça ne fonctionne pas...

    @++

    NeoMan

  4. #4
    Membre averti
    Inscrit en
    Septembre 2005
    Messages
    46
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 46
    Par défaut
    voilà j'ai trouvé.
    Alors effectivement le onMouseUp c'est partout, que tu cliques ou non sur le clip, par contre t'as un onPress (et respectivement un onRelease si tu préfères), qui lui ne porte que sur la zone du clip
    Chuis vraiment con parce que je l'utilise tous les jours... m'enfin j'avais pas percuté hier, l'était tard :p

  5. #5
    Membre confirmé Avatar de NeoMan
    Profil pro
    Inscrit en
    Avril 2002
    Messages
    171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2002
    Messages : 171
    Par défaut
    Effectivement ça fonctionne bien avec OnPress! C'est marrant je pensait que onPress était lié à l'appui d'une touche...
    Mais j'ai un nouveau problème, qui là ressemble bien à un bug de Flash...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
    class Hexagone {
    	static var COUNTER:Number=0;
    	private var _id:Number;
    	private var _canvas:MovieClip;
    	private var _owner:MovieClip;
     
    	public function Hexagone(aOwner:MovieClip) {
    		this._id = Hexagone.COUNTER++;
    		this._owner = aOwner;
    		this._canvas = this._owner.createEmptyMovieClip("hexagone" + this._id, this._owner.getNextHighestDepth());
    		this._canvas.onPress = this.onPress;
    	}
     
    	public function onPress():Void {
    		trace(this._id);
    	}
    }
    Ca me donne undefined... En fait il semblerait que this soit interprété comme étant le MovieClip this._canvas
    Du coup je fais un test pour vérifier mon hypothèse en remplacant le trace par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    trace(this._x + "; " + this._y);
    Mais là le compilateur refuse : pour lui this est une instance de Hexagone qui ne possède pas de propriété _x et _y...
    Conclusion : à l'éxecution this est le MovieClip et à la compilation this est l'instance Hexagone...

    J'ai trouvé une parade, mais c'est plus de la bricole qu'autre chose (enfin j'ai lu sur ce forum que Flash c'était que de la bidouille... encore un fait qui le confirme).
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
     
    class Hexagone {
    	static var COUNTER:Number=0;
    	private var _id:Number;
    	private var _canvas:MovieClip;
    	private var _owner:MovieClip;
     
    	public function Hexagone(aOwner:MovieClip) {
    		this._id = Hexagone.COUNTER++;
    		this._owner = aOwner;
    		this._canvas = this._owner.createEmptyMovieClip("hexagone" + this._id, this._owner.getNextHighestDepth());
    		this._canvas.onPress = this.onPress;
    		this._canvas._owner = this;
    	}
     
    	public function getX():Number {return this._canvas._x;};
    	public function getY():Number {return this._canvas._y;};
     
    	public function onPress():Void {
    		trace(this._owner._id);
    		trace(this._owner.getX() + " ; " + this._owner.getY());
    	}
    }

    Quelqu'un a-t-il une meilleure idée ??

    @++

    NeoMan

Discussions similaires

  1. Réponses: 5
    Dernier message: 14/01/2006, 20h30
  2. Réponses: 3
    Dernier message: 25/02/2005, 20h46
  3. [FLASH MX2004] Problème de reconnaissance des caractères
    Par Spikefreeman dans le forum Flash
    Réponses: 10
    Dernier message: 04/01/2005, 23h08
  4. [FLASH MX2004] Problème pour faire un bouton play
    Par melanie075 dans le forum Flash
    Réponses: 13
    Dernier message: 16/12/2004, 22h55
  5. [FLASH MX2004] Problème de menu avec explorer
    Par lyne dans le forum Flash
    Réponses: 2
    Dernier message: 24/08/2004, 19h34

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo