Bonjour,
Je suis en train de m'initier aux class et j'ai un problème avec des changements de variables dans un petit programme que j'ai écrit
Je voudrais faire varier indépendamment les variables "couleur" et "diamètre" alors que là seule est prise en compte la dernière touche appuyée.
Merci d'avance pour vos réponses
cercle[] touslescercles;
float f1 = 255,f2 = 3,f3 = 234;
float d = 200;
void setup(){
size(800,600);
touslescercles= new cercle[0];
}
void draw(){
background(0);
for(int b=0; b<touslescercles.length; b++){
touslescercles[b].impr();
}
}
class cercle{
color mc;
float x,y;
cercle(){
switch(key){
case ('1'): d = 200; break;
case ('2'): d = 50; break;
case ('w'): f1 = 255; f2 = 3; f3 = 232; break;
case ('x'): f1 = 3; f2 = 255; f3 = 232; break;
}
x= mouseX;
y = mouseY;
mc = color(f1,f2,f3);
touslescercles= (cercle[])append (touslescercles, this);
}
void impr(){
fill(mc);
ellipse(x,y,d,d);
}
}
void mouseReleased(){
new cercle();
}
Hors ligne
avec les class tu dois declarer des variable pour les faire changer dans la class je m'exprime peut etre pas tres bien
comme c'est la, ça ne fonctionnera pas car les variables de la classe sont mise en place uniquement lors de sa déclaration dans le void setup ensuite rien ne sera mis a jour
pour pouvoir mettre ça a jour il faut te crée des variable accessible en dehors ou dedant ta class et ça ce fera comme suis
float Xpos_() { return x; } // ca cest pour avoir acces a ta variable en dehors de ta classe //la facon de lappeller est "touslescercles[0].Xpos_();" //ensuite pour donner une valeur a ta variable cest void setXpos_(float _xpos_) { x = _xpos_; } //maintenant la facon dont lutiliser dans ta fonction impr() tu rajoute ceci setXpos_(mouseX); //ou si tu veux l'utiliser a lexterieure de ta class cest "touslescercles[0].setXpos_(mouseX);
vue que ta fonction impr() est dans ton draw alors les variable seront alors mis a jour
a+
Danny
Dernière modification par imdidi (2015-09-02 16:42:09)
Hors ligne
Bonjour,
Les classes sont indispensables dans une bonne programmation sous Processing, donc il est bien de commencer tôt.
Pour faire une liste modifiable d'instances, il est préférables d'utiliser le conteneur ArrayList plutôt que les tableaux dont la taille n'est pas modifiable en théorie( Il existe malgré tout des outils pour modifier la taille des tableaux).
Il faut considérer que les classes sont complètement indépendantes. C'est-à-dire ne pas avoir de variables globales dans la classe.
Voilà a quoi peut ressembler ton idée initiale :
ArrayList<Cercle> touslescercles; int diametreCourant; color couleurCourante; void setup() { size(800, 600); touslescercles= new ArrayList<Cercle>(); diametreCourant = 100; couleurCourante = color(255); } void draw() { background(0); for (Cercle c : touslescercles) { c.impr(); } } void mousePressed() { touslescercles.add(new Cercle(mouseX, mouseY, diametreCourant, couleurCourante)); } void keyPressed() { switch(key) { case ('1'): diametreCourant = 200; break; case ('2'): diametreCourant = 50; break; case ('w'): couleurCourante = color(255, 3, 232); break; case ('x'): couleurCourante = color(3, 255, 232); break; } } class Cercle { int x, y, d; color mc; Cercle(int posx, int posy, int diametre, color couleur) { x = posx; y = posy; d = diametre; mc = couleur; } void impr() { fill(mc); ellipse(x, y, d, d); } }
Hors ligne
Merci Mushussu,
Sur le livre de Jean Noël Lafargue il n'y a le conteneur ArrayList, il y a juste arrayCopy donc je ne connaissais pas ce conteneur. Après c'est assez ardu à déchiffer.
Dans le draw "for (Cercle c : touslescercles) {
c.impr();
}"
que veut dire le " c "
autrement la " class Cercle " me pose un problème de compréhension.:
on imprime "mc" et " d" alors que les variables sur lequelles on a joué sont "couleurCourante" et "diametreCourant"; Je ne comprends pas comment on est passé de l'un à l'autre.
Hors ligne
C'est assez simple, il faut se référer à l'aide de Processing qui est très bien faite :
https://processing.org/reference/for.html
En gros, avec cette façon d'écrire, la boucle for parcourt tous les éléments de l'ArrayList. La variable c est l'élément en cours.
On a passé les valeurs dans le constructeur de la classe, la méthode Cercle(). Donc chaque instance de cette classe a ses valeurs propres pour x, y, d et mc.
Hors ligne
Bonjour,
Juste une précision, y-t-il une limite au nombre de variables dans le void mousePressed() . Il doit être nécessairement équivalent dans le Cercle().
Pour être d'accord sur la terminologie ce que tu appelles méthode Cercle() c'est Cercle(int posx .............)
Hors ligne
citation :
Juste une précision, y-t-il une limite au nombre de variables dans le void mousePressed() . Il doit être nécessairement équivalent dans le Cercle().
Oui, puisque tu fais appel au constructeur, le nombre et le type d'arguments que tu passes dans la méthode doit être les mêmes que les paramètres que tu as défini précédemment dans la classe.
Ceci dit tu peux surcharger les méthodes :
http://www.objis.com/formation-java/tut … ml#partie2
citation :
Pour être d'accord sur la terminologie ce que tu appelles méthode Cercle() c'est Cercle(int posx .........….)
Oui, j'ai été trop concis.
Hors ligne