Annonce

>>> Bienvenue sur codelab! >>> Première visite ? >>> quelques mots sur codelab //// une carte des membres//// (apéros) codelab


#1 2015-01-12 18:10:56 Un problème de souris..

Ahera
nouveau membre
Date d'inscription: 2015-01-12
Messages: 2

Un problème de souris..



Je suis un débutant confronté a un problème simple mais incompréhensible pour moi... Le but de ce code est de créer un tableau a valeur aléatoire et de pouvoir inverser 2 cases. Mais il ne marche que si je clique une fois sur le bouton gauche de la souris puis sur le bouton droit.. je voudrais simplement garder le même bouton mais je ne trouve pas la solution ... Voici la portion du code qui me pose problème ..
void mousePressed()
{

  if ((m==0)&&(mouseButton==RIGHT))
  {
    x1=mouseX/80;
    y1=mouseY/80;
    m=1;
  }
   if ((m==1)&&(mouseButton==LEFT))
   {
    x2=mouseX/80;
    y2=mouseY/80;
    m=2;
   }
  if (m==2)
  {
    int ch = table[x1][y1];
    table[x1][y1] = table[x2][y2];
    table[x2][y2] = ch;
    m=0;
  } 
}

Dernière modification par Ahera (2015-01-12 18:27:10)

Hors ligne

 

#2 2015-01-12 20:50:40 Re : Un problème de souris..

Nicolas Lhommet
membre
Date d'inscription: 2014-01-18
Messages: 194

Re: Un problème de souris..



Je crois que j'ai compris où tu veux en venir et je propose ce type d'explication du problème qui me semble plus profitable qu'un "y'a qu'à faire comme ça" :

Si dans ton code tu mets le même bouton pour tes tests (m==0) et (m==1), le problème c'est que ces tests ne sont pas mutuellement exclusifs (puisque tu perds l'aspect exclusif de "bouton droit pour le premier test" / "bouton gauche pour le deuxième test"). Alors dès que le premier test sera concluant, celui-ci passera la variable m à 1 et de ce fait, rendra IMMÉDIATEMENT le second test concluant, puisqu'il aura lieu dans la foulée (et pas seulement lors de la prochaine série de tests, au clic suivant).

Alors pour éviter ce problème, plutôt qu'une suite de tests "if ..." (et donc qui s’effectueront les uns à la suite des autres dans tous les cas) on peut utiliser des tests du type "if ... else if ... else if" pour que, dès qu'un des tests est concluant, les suivants ne soient pas effectués avant un nouveau mousePressed().
Cela équivaut d'ailleurs à l'usage de la structure switch() avec des "breaks;", tout à fait appropriée pour effectuer des tâches selon la valeur d'une variable, et décrite ici : https://www.processing.org/reference/switch.html

A noter également que tes "étapes" 2 et 3 (c'est à dire pour m==1 et m==2) peuvent se combiner en une seule, puisque dès que tu as ton second clic, tu peux tout de suite effectuer ton interversion de case.

Dernière modification par Nicolas Lhommet (2015-01-12 21:27:40)

Hors ligne

 

#3 2015-01-13 19:38:48 Re : Un problème de souris..

Ahera
nouveau membre
Date d'inscription: 2015-01-12
Messages: 2

Re: Un problème de souris..



Hey! merci pour ta réponse rapide ! Je me doutais que c'était quelque chose dans ce genre... mais else c'est au cas ou le if est faux non ? Donc si le if est faux je veux rien qu'il se passe .... donc je met rien dans le else??? J'avoue que je suis un peu perdu la .... J'arrive pas à arreter mon if : (

Hors ligne

 

#4 2015-01-13 20:11:42 Re : Un problème de souris..

Nicolas Lhommet
membre
Date d'inscription: 2014-01-18
Messages: 194

Re: Un problème de souris..

Hors ligne

 

fil rss de cette discussion : rss

Pied de page des forums

Powered by FluxBB

codelab, graphisme & code : emoc / 2008-2024