Forums Développement Multimédia

Aller au contenu

Conflit, Clique et Drag

CODE Actionscript

9 réponses à ce sujet

#1 likeo

    Ceinture Blanche

  • Members
  • Pip
  • 5 messages

Posté 04 November 2011 - 22:55 PM

Bonjour/Bonsoir à tous,
Je rencontre actuellement un problème dans mon apprentissage de l'AS3 et je me vois aujourd'hui bloqué. En résumé j'ai l'intention de créer un minijeu avec une plateforme isométrique et j'en viens maintenant à gérer le "drag and drop" de la grille qui contient tout les cases. J'écoute le "MOUSE_UP" de chaque case pour écouter les clique sur les cases afin de gérer les actions du jeu et d'un autre coté je commence le drag de la grille au "MOUSE_DOWN" de la grille et je le stop au "MOUSE_UP" de cette dernière. Le soucis étant que quand je commence à "drag" la grille et que je la relâche, Flash prend en compte le MOUSE_UP de la case ou j'ai commencer à "drag" et cela fait un comme un clique sur cette case...

Comment esquiver ce soucis afin que quand le drag est relâché flash ne prenne pas en compte un relâchement d'un clique sur les cases?

Un grand merci d'avance.
Ciao.

#2 deuxsucres

    Ceinture Marron

  • Members
  • PipPipPipPipPipPip
  • 115 messages

Posté 05 November 2011 - 10:06 AM

Essayez de stocker l'état dans lequel se trouve votre case, dans une variable dragging par exemple. Vous pourrez ainsi savoir, dans votre écouteur MOUSE_UP, si la case est en état de drag et donc qu'il faut exécuter le drop, ou si la case est en état normal et donc qu'il faut exécuter le click :


function mouseUpHandler(event:MouseEvent):void {
  if(dragging) {
    //Exécuter les actions liées au drop...
    dragging = false ;
  }else{
    //Exécuter les actions liées au clique...
  }
}
 


#3 likeo

    Ceinture Blanche

  • Members
  • Pip
  • 5 messages

Posté 05 November 2011 - 13:33 PM

Voir le messagedeuxsucres, le 05 November 2011 - 10:06 AM, dit :

Essayez de stocker l'état dans lequel se trouve votre case, dans une variable dragging par exemple. Vous pourrez ainsi savoir, dans votre écouteur MOUSE_UP, si la case est en état de drag et donc qu'il faut exécuter le drop, ou si la case est en état normal et donc qu'il faut exécuter le click :


function mouseUpHandler(event:MouseEvent):void {
  if(dragging) {
    //Exécuter les actions liées au drop...
    dragging = false ;
  }else{
    //Exécuter les actions liées au clique...
  }
}
 

J'avais déjà essayé précédemment cette solution mais quand je fais un MOUSE_DOWN sur la grille même si je ne bouge pas la souris cela prend ça comme un drag donc je pense faudrait combiner l'écoute du MOUSE_DOWN et du mouvement de la souris mais comment m'y prendre ...

Merci de votre réponse

#4 deuxsucres

    Ceinture Marron

  • Members
  • PipPipPipPipPipPip
  • 115 messages

Posté 05 November 2011 - 14:35 PM

Ok, donc il vous faut démarrer le drag sur le MOUSE_MOVE et non sur le MOUSE_DOWN :

* Si MOUSE_DOWN puis MOUSE_UP = click
* Si MOUSE_DOWN puis MOUSE_MOVE = drag puis MOUSE_UP = drop

Une méthode possible :



var mouseDown:Boolean ;

var dragging:Boolean ;

function mouseDownHandler(event:MouseEvent):void {
  mouseDown = true ;
}

function mouseMoveHandler(event:MouseEvent):void {
  if(mouseDown) {
    dragging = true ;
    //Exécuter le drag
  }
}

function mouseDownHandler(event:MouseEvent):void {
  mouseDown = false ;
  if(dragging) {
    dragging = false ;
    //Exécuter le drop
  }else{
    //Exécuter le click
  }
}

 


#5 likeo

    Ceinture Blanche

  • Members
  • Pip
  • 5 messages

Posté 05 November 2011 - 14:55 PM

C'est bon votre solution marche parfaitement, un grand merci à vous. J'espère que cette solution n'est pas trop lourde. je me suis aussi permis de modifier ça :

function mouseMoveHandler(event:MouseEvent):void {
  if(mouseDown) {
    dragging = true ;
    //Exécuter le drag
  }
}
 

en :

if(mouseDown && !dragging) {

L'histoire qu'il n'engage pas le drag une infinité de fois.

Encore merci! :smile: Je n'ai plus qu'a continuer.

#6 deuxsucres

    Ceinture Marron

  • Members
  • PipPipPipPipPipPip
  • 115 messages

Posté 05 November 2011 - 15:28 PM

Bien vue la correction :smile:

#7 Nataly

    Community Jane

  • Moderateur
  • PipPipPipPipPipPipPipPip
  • 5783 messages

Posté 06 November 2011 - 00:48 AM

salut :)

il me semble que tu aurais pu aussi écouter le eventPhase du paramètre. si tu écoutes la grille : 2 (capture)--> un up sur grille ; 3 (remontée) --> sur un enfant.
Le savoir est le seul bien qui s'accroit quand on le partage
une tartine de tutos

#8 deuxsucres

    Ceinture Marron

  • Members
  • PipPipPipPipPipPip
  • 115 messages

Posté 06 November 2011 - 10:34 AM

j'ai rien compris...

#9 Nataly

    Community Jane

  • Moderateur
  • PipPipPipPipPipPipPipPip
  • 5783 messages

Posté 06 November 2011 - 12:02 PM

Voir le messagedeuxsucres, le 06 November 2011 - 10:34 AM, dit :

j'ai rien compris...

Note bien que le contraire eût été surprenant : 1) c'est rédigé nawak,
2) ça peut pas marcher :oops:

Crème de banane nocturne que je fais des fois. Toutes mes scuz DeuxSucres ! ;)



Ça m'a surprise c't'histoire de mouseMove. Vu que c'est assez typique comme problématique j'ai pas réfléchi plus loin…

L'autre façon de faire (genre qui se rattrape aux branches :mrgreen: ) c'est de regarder la position de la souris qd on enfonce le bouton et quand on le relache, si déplacement c'est un glissé/lâché, sinon un clic… oui bon… :arrow:
Le savoir est le seul bien qui s'accroit quand on le partage
une tartine de tutos

#10 dcz.switcher

  • Community Manager
  • PipPipPipPipPipPipPipPip
  • 2532 messages

Posté 06 November 2011 - 12:12 PM

Le concept des phases est très intéressant, en particulier pour l'optimisation car il peut permettre de réduire le nombre d'écouteurs.

J'ai trouvé une explication avec schéma qui m'a l'air pas mal

http://www.guillaume...enements-event/

De même que d'utiliser le stopImmediatePropagation() peut s'avérer utile également dans certains cas

Une page en anglais avec exemple en prime !

http://livedocs.adob...=events_08.html
"Ce que l'on conçoit bien s'énonce clairement et les mots pour le dire arrivent aisément"

embryon de site



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

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