Bonjour,
Utilisateur de pd, je commence processing, dans l'espoir de travailler avec les deux logiciels pour créer des applis multimédia.
Pour apprendre j'ai décidé de créer de GUIs en processing (similaire à controlP5). J'ai crée des sliders horizontaux, les verticaux ont encore quelques bugs et je voulais créer un toggle avec plusieurs pas. Je m'explique : on définit un nombre de pas et à chaque fois qu'on appui dessus le pas augmente de un. Le pas va gérer la couleur du slider on part d'une couleur quelqueconque et à chaque pas on se rapproche d'une deuxième couleur (avec lerpColor).
Mon pb vient du fait qu'à chaque fois que je clique j'avance de deux pas au lieu d'un seul et que je comprends pas pourquoi. j'utilise un boucle while pour gérer l'interaction souris
while(mouseButton==LEFT){
...
break;}
mouseButton=0;
Est-ce que j'ai bien implementé cette fonction ? est-ce que le break me permet bien de sorti de la boucle une fois que les lignes de codes sont effectuées ? et surtout pouquoi est-ce que je me retrouve avec deux incrémentation de pas à chaque fois que je clique ?
Le sketch est joint au post, à votre bon coeur
Dernière modification par Berenger (2012-03-04 16:40:41)
Hors ligne
Je n'ai pas trouvé de sketch collé à ton post.
Mais à première vue il vaut mieux faire comme ceci :
void mousePressed(){ if(mouseButton == LEFT){ ... }}
Hors ligne
maintenant il est joint
alors si je fais ça en fait je ne sors plus de la boucle et du coup mon boutton n'arrete pas de boucler sur les différents pas.
à moins qu'il y ait un moyen de simple de sortir d'une boucle if (j'imagine si la condition n'est plus respectée) mais je n'ai pas trouvé où placer la réintialisation de mouseButton pour sortir de la boucle directement et avoir un comportement comme celui que je souhaite.
Hors ligne
il faut savoir que mousePressed reste en true tant que le bouton est appuyé, après faut joué avec released
Hors ligne
cgiles a écrit:
il faut savoir que mousePressed reste en true tant que le bouton est appuyé, après faut joué avec released
oui on est d'accord et c'est précisement mon problème, je ne sais pas où le placer.
J'ai essayé plusieurs endroits, j'ai essayé plusieurs tests (avec des if, avec des while) et en enssayant les différents moyens d'accès à mouse (mouseButton, mouseClicked(), mousePressed(),mousePressed, mouseReleased() ...) mais pour l'instant rien n'y fait.
Hors ligne
tu as les events mousePressed et mouseReleased a mettre en dehors du draw, ils s'activent quand l'événement se produit.
void mousePressed(){
}
void mouseReleased(){
}
Et ces events ne sont appellé que lorsque l'évenement est produit, soit quand le bouton s'enfonce et quand il est relaché, pas plus, pas moins.
Dernière modification par cgiles (2012-03-05 14:15:40)
Hors ligne
oui je vois donc maintenant dans ma classe j'ai ces deux fonctions : je les ai mis tout à la fin de ma classe
void mousePressed() {
if (mouseX>xPos && mouseX<xPos+tSize && mouseY>yPos && mouseY<yPos+tSize) {
step = (step+1)%nSteps;
float amount =step/(nSteps-1);
//calculate color with lerpColor to get a more intense color each step according to target color
tempColor = lerpColor(tColor1, tColor2, amount);
}
}
void mouseReleased(){
//mouseButton=0;
}
le pb est qu'il ne se passe plus rien quand je clique sur le bouton
Hors ligne
Salut Bérenger,
Il y a des infos pour utiliser les "évènements" dans des classes de libraries sur ces pages
http://code.google.com/p/processing/wiki/LibraryBasics
http://wiki.processing.org/w/Register_events
J'ai modifié ton code en conséquence, et ça fonctionne, en gros :
- créer une référence de l'applet pricniapl que les classes pourront utiliser
- déclarer ta classe comme 'public'
- référencer la fonction d'écoute des évènements auprès de l'applet principal
- ajouter la fonction d'écoute d'évènements
Ce qui donne :
Hors ligne
Chouette merci emoc !
si je comprends bien ce que tu me dis je pourrais même me passer d'appeler myToggle.display(); en faisant une classe : public class draw(){...} ?
Hors ligne
Berenger a écrit:
si je comprends bien ce que tu me dis je pourrais même me passer d'appeler myToggle.display(); en faisant une classe : public class draw(){...} ?
Oui c'est ça, par exemple les objets de controlP5 ne nécessitent pas d'être explicitement affichés dans draw()
D'ailleurs, je ne sais pas si tu as jeté un oeil, mais il est possible d'étendre controlP5, il y a un exemple ici http://www.sojamo.de/libraries/controlP … roller.pde
Hors ligne
Pages: 1