bonjour
je voudrais faire une class bouton avec plusieurs boutons
ex Bouton b1,b2,b3ect;mais cela ne fontionne pas ;il y a surement quelques choses que je n'ai pas compris.
Bouton b1,b2; void setup() { size(600, 800); b1=new Bouton(); b2=new Bouton(); } void draw() { b1.display(); b2.display(); } class Bouton { float x; float y; Bouton() { x=width/2; y=100; } Bouton(){ x=100; y=400; } void display() { ellipse(x, y, 40, 40); } }
Hors ligne
En fait chaque bouton doit avoir des coordonnées propres. Pour cela du doit passer dans le constructeur de la classe des paramètres.
Il existe aussi la surcharge du constructeur, c'est-à-dire en fonction des paramètres passés, l'un ou l'autre des constructeurs sera pris en compte :
Bouton b1, b2; void setup() { size(600, 800); b1=new Bouton(200, 200); b2=new Bouton(); } void draw() { b1.display(); b2.display(); } class Bouton { float x; float y; Bouton(int _x, int _y) { x = _x; y = _y; } Bouton() { x = 100; y = 400; } void display() { ellipse(x, y, 40, 40); } }
Hors ligne
bonjour
je te remercie pour ta réponse;mais il y a deux méthodes;ce que je voulais savoir c'est si il était possible de faire n boutons avec une méthode?j'avais testé l'exemple avec les deux méthodes ,ce que je ne comprends pas c'est pas exemple si j'ai 5 boutons et si il faut une méthode par bouton c'est comment faire?car il n'y a que deux méthodes.Avec par exemple le programme qui suit,sans la surcharges est il possible de faire plusieurs boutons.Car je l'ai essayez avec un bouton cela fonctionne,mais avec deux il me dit constructeur indéfini .
merci.
Bouton b1,b2,b3;
void setup()
{
size(500,800);
b1=new Bouton();
b2=new Bouton();
b3=new Bouton();
}
class Bouton {
float x;
float y;
Bouton() {
x=width/2;
y=100;
}
Bouton(){
x=100;
y=400;
}
Hors ligne
avec la méthode de surchrage cela fonctionne ,Mais comment faire avec l'autre méthode?.
Bouton b1,b2,b3,b4; void setup() { size(600,800); b1=new Bouton(width/2,100); b2=new Bouton(200,100); b3=new Bouton(400,100); b4=new Bouton(200,400); } void draw() { b1.display(); b2.display(); b3.display(); b4.display(); } class Bouton { float x,y; Bouton(float ix,float iy){ x=ix; y=iy; } void display() { rect(width/2,100,50,50); rect(200,100,40,40); rect(400,100,30,30); rect(200,400,30,30); } }
Hors ligne
Je ne comprends pas pourquoi dans la méthode void display() tu fais afficher les carrés avec des coordonnées définis.
Oublie dans un premier temps la surcharge de méthode.
Je pense que tu devrais relire des tutoriels sur les classes.
Un bouton est défini par sa position, sa taille, son état, sa couleur …
class Bouton { int x, y, taille; boolean etat; color couleur; }
La classe devra permettre lors de la construction d'un nouveau bouton de remplir ces différentes caractéristiques. Il se peut qu'il y en ai par défaut, sa couleur et sa taille par exemple.
class Bouton { int x, y, taille; boolean etat; color couleur; Bouton(int _x, int _y) { x = _x; y = _y; taille = 30; etat = false; couleur = color(255, 0, 0); } }
Nous pouvons à présent créer une méthode pour l'afficher qui dépend de l'état du bouton
void affichage() { if (etat) { fill(couleur); } else { fill(255); } rect(x, y, taille, taille); }
Ensuite, il faut déclarer et instancier cette classe d'objet :
Bouton b1, b2, b3, b4; void setup() { size(600, 600); b1 = new Bouton(width/2, 100); b2 = new Bouton(200, 100); b3 = new Bouton(400, 100); b4 = new Bouton(200, 400); } void draw() { b1.affichage(); b2.affichage(); b3.affichage(); b4.affichage(); } class Bouton { int x, y, taille; boolean etat; color couleur; Bouton(int _x, int _y) { x = _x; y = _y; taille = 30; etat = false; couleur = color(255, 0, 0); } void affichage() { if (etat) { fill(couleur); } else { fill(255); } rect(x, y, taille, taille); } }
Hors ligne
bonjour
je te remercie pour tes explications;mais d'après ce que je comprends dans le programme ,le bouton sur lequel je place la souris devrait changer de couleur quant je clic dessus;mais la il ne se passe rien;je ne comprends pas d'ou vient le problème .
merci encore.
Hors ligne
tu peux aussi utiliser la classe JButton de java
Hors ligne
C'est normal car la méthode pour le clique n'a pas été implémenté. Je te laissais le soin de le faire.
Si tu veux des boutons fonctionnels sans te poser de questions utilise ControlP5.
Si tu veux comprendre le fonctionnement des classes et l'interaction entre les instances et les différents évènements alors il faut se creuser la tête et chercher dans les différents tutoriels poser des questions précises dans les forums.
Pour la deuxième solution, un petit coup d'oeil ici te sera profitable :
http://wiki.processing.org/w/Register_events
Bon courage
[Edit] Il semblerait que l'exemple du lien ne fonctionne pas pour la version 2
Dernière modification par Mushussu (2014-02-05 08:27:03)
Hors ligne
bonjour
je vous remercies pour toutes vos réponses;je vais regarder tous ça à tête reposer.
merci .
Hors ligne
Voici la version pour Processing 2.0 de la gestion des évènements clavier et souris dans une classe :
Bouton b1, b2; void setup() { size(600, 600); b1 = new Bouton(this, width / 2, height / 2); b2 = new Bouton(this, 100, 100); } void draw() { } public class Bouton { PApplet parent; PVector position; int taille; boolean etat; color couleur; Bouton (PApplet _parent, int _x, int _y) { parent = _parent; position = new PVector(_x, _y); taille = 40; etat = false; couleur = color(255, 0, 0); parent.registerDraw(this); parent.registerMethod("mouseEvent", this); parent.registerMethod("keyEvent", this); } void draw() { if (etat) { fill(couleur); } else { fill(255); } rect(position.x, position.y, taille, taille); } void mouseEvent(processing.event.MouseEvent event) { int x = event.getX(); int y = event.getY(); switch (event.getAction()) { case MouseEvent.PRESS: if ((x > position.x) && (x < position.x + taille) && (y > position.y) && (y < position.y + taille)) { etat = !etat; } break; case MouseEvent.RELEASE: // Routine ... break; case MouseEvent.CLICK: // Routine ... break; case MouseEvent.DRAG: // Routine ... break; case MouseEvent.MOVE: // Routine ... break; } } void keyEvent(processing.event.KeyEvent event) { if (event.getKey() == ' ') { } } }
Hors ligne
bonjour
Remerciements pour le programme que tu m'as envoyé;c'est tous à fait ce que je voulais,je trouve que c'est quant même très compliqué pour faire fonctionner quelques boutons.Je vais regarder ce que '(mouse event )veux dire je ne connais pas cette instruction.
merci.
Hors ligne
Je me suis permis d'élargir ta requête pour offrir un cadre global pour ceux qui suive le forum. De plus cette manière d'aborder le problème permet de construire ses propres librairies.
Si tu souhaites d'avantage de renseignements :
https://github.com/processing/processin … ary-Basics
Sinon, je joins le lien d'une page en construction sur LE wiki:
http://wiki.labomedia.org/index.php/Acc … une_classe
Hors ligne
citation :
je trouve que c'est quant même très compliqué pour faire fonctionner quelques boutons
D'où la pertinence, comme te le suggérai Mushussu, d'utiliser une librairie telle que ControlP5 qui gère tout cela pour toi...
Le code que tu as ici peut apparaître compliqué parce que, justement, il ne permet pas de ne faire fonctionner que quelques boutons...
Il est la base qui permet de faire fonctionner n'importe quel bouton, pour n'importe quel besoin...
Bon courage...
Hors ligne
hahaha merci labomédia!
Je m'étais pris la tête avec la gestion des évents, et en fait c'est ultra simple....
Du coup j'en profite car je me posais la question : quelqu'un à réussi à faire tourner controlP5 en multitouch pour android?
Me souviens avoir buté dessus il y a un an sans pouvoir y répondre autrement qu'en me refaisant des classes bouton et slider justement... mais pourtant y'avais bien cette petite implémentation ControlP5pointer non?
Hors ligne
bonjour
Dans la routine MouseEven que tu m'as fait parvenir ;que dois on mettre à l'endroit ou il est écrit routine?de quel genre de routine s'agit-il?
merci
case MouseEvent.RELEASE:
// Routine ...
break;
Hors ligne