Annonce

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


#1 2015-09-02 16:18:25 initiation aux class

PHIFO
membre
Date d'inscription: 2014-04-27
Messages: 91

initiation aux class



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

 

#2 2015-09-02 16:33:19 Re : initiation aux class

imdidi
membre
Date d'inscription: 2012-10-05
Messages: 242

Re: initiation aux class



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

 

#3 2015-09-02 18:50:00 Re : initiation aux class

Mushussu
membre
Lieu: Orléans
Date d'inscription: 2012-05-24
Messages: 802

Re: initiation aux class



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

 

#4 2015-09-02 22:23:35 Re : initiation aux class

PHIFO
membre
Date d'inscription: 2014-04-27
Messages: 91

Re: initiation aux class



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

 

#5 2015-09-02 23:14:28 Re : initiation aux class

Mushussu
membre
Lieu: Orléans
Date d'inscription: 2012-05-24
Messages: 802

Re: initiation aux class



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

 

#6 2015-09-03 14:42:57 Re : initiation aux class

PHIFO
membre
Date d'inscription: 2014-04-27
Messages: 91

Re: initiation aux class



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

 

#7 2015-09-03 16:33:22 Re : initiation aux class

Mushussu
membre
Lieu: Orléans
Date d'inscription: 2012-05-24
Messages: 802

Re: initiation aux class



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

 

fil rss de cette discussion : rss

Pied de page des forums

Powered by FluxBB

codelab, graphisme & code : emoc / 2008-2024