Annonce

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


#1 2015-09-10 10:50:57 Classes et Listes

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

Classes et Listes



Bonjour,

    Je cherche à modifier un programme afin que lorsque que je change la couleur des confettis, ceux  crées avant le changement gardent leurs couleurs initiales et que seuls ceux crées après le changement aient les nouvelles couleurs.

    Pour afficher les couleurs j'ai crée une liste " pal = {p1,p2,p3,p4,p5,p6} " dans laquelle les variables p1, p2 ....... changent lorsque j’appuie sur les bouton "a" ou "z". Ces variables peuvent elles représenter des code hexadécimaux?

   Le premier problème que je rencontre est en ligne 18 où j'ai le message d'erreur " le constructeur "Particle (int,int, int,int, int[]" n'existe pas.  Pourtant il est bien déclaré en ligne 2?


ArrayList<Particle> pts;
boolean onPressed;
int p1 = #ff00ff, p2 = #00ffff, p3 = #00ff00,p4 = #7920ff,p5 = #ff3300,p6 = #ffff00;
color[] pal = {p1, p2, p3, p4, p5, p6 }; 
float dim=1; float diam=40;


void setup() {
  size(1280, 720); 
  frameRate(30);
  pts = new ArrayList<Particle>(); 
}

void draw() {
    background(0);
  if (onPressed) {
    for (int i=0; i<10; i++) {
      Particle newP = new Particle(mouseX, mouseY, i+pts.size(), i+pts.size(), pal);
      pts.add(newP);
    }
  }

  for (int i=0; i<pts.size (); i++) {
    Particle p = pts.get(i);
    p.update();
    p.display();
  }

  for (int i=pts.size ()-1; i>-1; i--) {
    Particle p = pts.get(i);
    if (p.dead) {
      pts.remove(i);
    }
  }
}

void mousePressed() {
  onPressed = true;
}

void mouseReleased() {
  onPressed = false;
}
class Particle {
  color palette;
  PVector loc, vel, acc;
  int lifeSpan, passedLife;
  boolean dead;
  float alpha, weight, weightRange, decay, xOffset, yOffset;
  int c;
  Particle(float x, float y, float _xOffset, float _yOffset,int let ) {
    palette =let;
    loc = new PVector(x, y);
    float randDegrees = random(360);
    vel = new PVector(cos(radians(randDegrees)), sin(radians(randDegrees)));
    vel.mult(random(5));
    acc = new PVector(0, 0);
    lifeSpan = int(random(30, 90));
    decay = random(0.85, 0.95);
    weightRange = random(3, diam);
    c = (int) random(pal.length);

    xOffset = _xOffset;
    yOffset = _yOffset;
  }

  void update() {
    if (passedLife>=lifeSpan) {
      dead = true;
    } else {
      passedLife++;
    }

    alpha = float(lifeSpan-passedLife)/lifeSpan * 70+50;
   // dim = float(lifeSpan-passedLife)/lifeSpan * weightRange;
    acc.set(0, 0);

    float rn = (noise((loc.x+frameCount+xOffset)*0.01, (loc.y+frameCount+yOffset)*0.01)-0.5)*4*PI;
    float mag = noise((loc.y+frameCount)*0.01, (loc.x+frameCount)*0.01);
    PVector dir = new PVector(cos(rn), sin(rn));
    acc.add(dir);
    acc.mult(mag);
    float randDegrees = random(360);
    PVector randV = new PVector(cos(radians(randDegrees)), sin(radians(randDegrees)));
    randV.mult(0.5);
    acc.add(randV);
    vel.add(acc);
    vel.mult(decay);
    vel.limit(3);
    loc.add(vel);
  }
 
  void display() {
   
    dim = float(lifeSpan-passedLife)/lifeSpan * weightRange;
   
    strokeWeight(dim+1.5+2);
    stroke(0,alpha);
    point(loc.x, loc.y);
    strokeWeight(dim*.5+2);
    //stroke(#6FFF00);
    stroke(pal[c]);
   
if(keyCode==38){
   diam +=0.002;
  }
 
if(keyCode==40){
   diam -=0.002;
}
   
  if (keyPressed=true) {
    switch(key) {
     case ('a'): p1 = #ff00ff;p2 = #00ffff;p3 = #00ff00;p4 = #7920FF;p5 = #FF3300;p6 = #ffff00 ; break;
     case ('z'): p1 = #ff00ff;p2 = #00ffff;p3 = #00ff00;p4 = #7920FF;p5 = #FF3300;p6 = #ffff00 ; break;
   }
     }
    point(loc.x, loc.y);
     
  }
}

  Il me semble que le constructeur est  bien déclaré?

Merci d'avance

Hors ligne

 

#2 2015-09-10 11:06:05 Re : Classes et Listes

Olivier
N°4
Lieu: Chalon sur la Saône
Date d'inscription: 2009-04-07
Messages: 1471
Site web

Re: Classes et Listes



Dans ta class, Particle est déclaré de la sorte :

Particle(float x, float y, float _xOffset, float _yOffset,int let )

Alors que toi, tu l'initialises avec pal comme 5ème argument qui n'est pas un int mais un int[] (un tableau avec tes 6 valeurs, p1, p2...).

Je n'ai pas le temps de regarder le code pour résoudre ton pb, mais cela te permettra peut-être d'avancer.

Par ailleurs, ligne 2, ce n'est Particle que tu déclares, mais pts, qui est un ArrayList qui peut accueillir des Particle.

Bon courage.


L'Amour au Peuple !

Hors ligne

 

#3 2015-09-10 14:37:58 Re : Classes et Listes

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

Re: Classes et Listes



Ok j'ai pu corriger grâce à tes indications

sur la ligne 51  Particle(float x, float y, float _xOffset, float _yOffset,int let[])
afin que le constructeur déclaré soit  du même format que la Particle de la ligne 18 (je m'exprime mal peut-être).

sur la ligne 52 j'ai déclaré
  palette =let[c];

je n'ai plus de message d'erreur et ça fonctionne.....

sauf que lorsque je tape sur "a" ou "z" je n'ai pas de changement de couleur.

Je vais réfléchir à ça

Hors ligne

 

#4 2015-09-11 09:24:05 Re : Classes et Listes

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

Re: Classes et Listes



C'est bon tout est solutionné,  ce n'est pas évident lorsqu'on démarre sur la programmation objet de faire varier les classes mais entre les indications données et les messages d'erreur de Processing on y arrive.

   Processing3 est un plus à ce niveau là et aide bien à comprendre les erreurs.

Merci pour le coup de main

Philippe

Hors ligne

 

#5 2015-09-11 10:27:46 Re : Classes et Listes

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

Re: Classes et Listes



Bonjour,

Quand on trouve une solution par ses propres moyens, ce qui est souvent le cas, il est bon dans un forum de publier le résultat. Nous ne t'aidons pas seulement toi, mais tout ceux qui en cherchant leur problème consulteront cette page.

Je te propose une solution :

ArrayList<Particle> pts; 
boolean onPressed; 
color[] pal = {
  #ff00ff, #00ffff, #00ff00, #7920ff, #ff3300, #ffff00
};  
float dim=1; 
float diam=40;


void setup() { 
  size(1280, 720);  
  frameRate(30); 
  pts = new ArrayList<Particle>();
} 

void draw() { 
  background(0);
  if (onPressed) { 
    for (int i=0; i<10; i++) { 
      Particle newP = new Particle(mouseX, mouseY, i+pts.size(), i+pts.size(), pal[(int) random(pal.length)]); 
      pts.add(newP);
    }
  } 

  for (int i=0; i<pts.size (); i++) { 
    Particle p = pts.get(i); 
    p.update(); 
    p.display();
  } 

  for (int i=pts.size ()-1; i>-1; i--) { 
    Particle p = pts.get(i); 
    if (p.dead) { 
      pts.remove(i);
    }
  }
} 

void mousePressed() { 
  onPressed = true;
} 

void mouseReleased() { 
  onPressed = false;
} 

void keyPressed() {
  switch(key) {
    case ('a'): 
    pal[0] = #ff0000;
    pal[1] = #ff3300;
    pal[2] = #ff6600;
    pal[3] = #ff9900;
    pal[4] = #ffcc00;
    pal[5] = #ffff00 ; 
    break;
    case ('z'): 
    pal[0] = #00ff00;
    pal[1] = #00ff33;
    pal[2] = #00ff66;
    pal[3] = #00ff99;
    pal[4] = #00ffcc;
    pal[5] = #00ffff ; 
    break;
  }
}

class Particle { 
  color palette;
  PVector loc, vel, acc; 
  int lifeSpan, passedLife; 
  boolean dead; 
  float alpha, weight, weightRange, decay, xOffset, yOffset; 

  Particle(float x, float y, float _xOffset, float _yOffset, int let) { 
    loc = new PVector(x, y); 
    float randDegrees = random(360); 
    vel = new PVector(cos(radians(randDegrees)), sin(radians(randDegrees))); 
    vel.mult(random(5)); 
    acc = new PVector(0, 0); 
    lifeSpan = int(random(30, 90)); 
    decay = random(0.85, 0.95); 
    weightRange = random(3, diam); 
    palette =let; 

    xOffset = _xOffset; 
    yOffset = _yOffset;
  } 

  void update() { 
    if (passedLife>=lifeSpan) { 
      dead = true;
    } else { 
      passedLife++;
    } 

    alpha = float(lifeSpan-passedLife)/lifeSpan * 70+50; 
    // dim = float(lifeSpan-passedLife)/lifeSpan * weightRange; 
    acc.set(0, 0); 

    float rn = (noise((loc.x+frameCount+xOffset)*0.01, (loc.y+frameCount+yOffset)*0.01)-0.5)*4*PI; 
    float mag = noise((loc.y+frameCount)*0.01, (loc.x+frameCount)*0.01); 
    PVector dir = new PVector(cos(rn), sin(rn)); 
    acc.add(dir); 
    acc.mult(mag); 
    float randDegrees = random(360); 
    PVector randV = new PVector(cos(radians(randDegrees)), sin(radians(randDegrees))); 
    randV.mult(0.5); 
    acc.add(randV); 
    vel.add(acc); 
    vel.mult(decay); 
    vel.limit(3); 
    loc.add(vel);
  } 

  void display() {

    dim = float(lifeSpan-passedLife)/lifeSpan * weightRange; 

    strokeWeight(dim+1.5+2); 
    stroke(0, alpha); 
    point(loc.x, loc.y); 
    strokeWeight(dim*.5+2); 
    //stroke(#6FFF00); 
    stroke(palette); 
    point(loc.x, loc.y);
  }
}

Il faut que tu fasses attention à ne pas "croiser les effluves", c'est-à-dire ne pas utiliser des variables globales dans les classes.

Hors ligne

 

#6 2015-09-11 13:48:48 Re : Classes et Listes

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

Re: Classes et Listes



Ok pas de  problème , je ne connais pas les usages mais je le fais volontiers bien que je ne pense pas être d'un grand secoure vu mon niveau.

     Voici donc comment j'ai résolu le problème après quelques heures de travail......

   Il me reste  à résoudre le problème des flèches qui n'arrêtent pas la croissance  ou la décroissance lorsque je cesse d'appuyer dessus.

ArrayList<Particle> pts;
boolean onPressed;
color[] pal = { #ff00ff, #00ffff, #00ff00, #7920ff, #ff3300, #ffff00};
     
float dim=1; float diam=40;
color[] pal1 = { #ff00ff, #00ffff, #00ff00, #7920ff, #ff3300, #ffff00};
color[] pal2 = {255,255,255,255,255,255};
color[] pal3 = { #03FFFD, #6B03FF, #FA03FF, #C303FF, #6B03FF, #03FFEC};
color[] pal4 = { #FFDA03, #FAFF03, #FF8E03, #FF1803, #D8FF03, #FF5303};
color[] pal5 = { #0EFF03, #FFEB03, #00E533, #FFC903, #03FF7A, #EAFF4D};
color[] pal6 = { #FF5A08, #FFAD08, #F2476F, #FF0582, #F27F5F, #FCB052};
color[] pal7 = { #FC5257, #F952FC, #DFB2E8, #FF0F03, #E8B7E7, #F0A4FA};
color[] pal8 = { #230427, #C6C2C6, #B6BFED, #CECCCD, #E3E5E4, #EAEAE3};

void setup() {
  size(1280, 720); 
  frameRate(30);
  pts = new ArrayList<Particle>(); 
     
}

void draw() {

    background(0);

  if (onPressed) {
    for (int i=0; i<10; i++) {
      Particle newP = new Particle(mouseX, mouseY, i+pts.size(), i+pts.size(), pal);
      pts.add(newP);
    }
  }

  for (int i=0; i<pts.size (); i++) {
    Particle p = pts.get(i);
    p.update();
    p.display();
  }

  for (int i=pts.size ()-1; i>-1; i--) {
    Particle p = pts.get(i);
    if (p.dead) {
      pts.remove(i);
    }
  }
}

void mousePressed() {
  onPressed = true;
}

void mouseReleased() {
  onPressed = false;
}
class Particle {
  color[] palette;
  PVector loc, vel, acc;
  int lifeSpan, passedLife;
  boolean dead;
  float alpha, weight, weightRange, decay, xOffset, yOffset;
  int c;
  Particle(float x, float y, float _xOffset, float _yOffset,color[] let) {
    palette =let;
    loc = new PVector(x, y);
    float randDegrees = random(360);
    vel = new PVector(cos(radians(randDegrees)), sin(radians(randDegrees)));
    vel.mult(random(5));
    acc = new PVector(0, 0);
    lifeSpan = int(random(30, 90));
    decay = random(0.85, 0.95);
    weightRange = random(3, diam);
    c = (int) random(pal.length);

    xOffset = _xOffset;
    yOffset = _yOffset;
  }

  void update() {
    if (passedLife>=lifeSpan) {
      dead = true;
    } else {
      passedLife++;
    }

    alpha = float(lifeSpan-passedLife)/lifeSpan * 70+50;
   dim = float(lifeSpan-passedLife)/lifeSpan * weightRange;
    acc.set(0, 0);

    float rn = (noise((loc.x+frameCount+xOffset)*0.01, (loc.y+frameCount+yOffset)*0.01)-0.5)*4*PI;
    float mag = noise((loc.y+frameCount)*0.01, (loc.x+frameCount)*0.01);
    PVector dir = new PVector(cos(rn), sin(rn));
    acc.add(dir);
    acc.mult(mag);
    float randDegrees = random(360);
    PVector randV = new PVector(cos(radians(randDegrees)), sin(radians(randDegrees)));
    randV.mult(0.5);
    acc.add(randV);
    vel.add(acc);
    vel.mult(decay);
    vel.limit(3);
    loc.add(vel);
  }
 
  void display() {
   
    dim = float(lifeSpan-passedLife)/lifeSpan * weightRange;
   
    strokeWeight(dim+1.5+2);
    stroke(0,alpha);
    point(loc.x, loc.y);
    strokeWeight(dim*.5+2);
    //stroke(#6FFF00);
    stroke(palette[c]);
   
   if(keyCode==38){
   diam +=0.01;
   } 
   if(keyCode==40){
   diam -=0.01;
   }
 
    point(loc.x, loc.y);   
  }


void keyPressed() {
    switch(key) {
     case ('a'): pal = pal1; break;
     case ('z'): pal = pal2; break;
     case ('e'): pal = pal3; break;
     case ('r'): pal = pal4; break;
     case ('t'): pal = pal5; break;
     case ('y'): pal = pal6; break;
     case ('u'): pal = pal7; break;
     case ('i'): pal = pal8; break;
   }
     }

Hors ligne

 

fil rss de cette discussion : rss

Pied de page des forums

Powered by FluxBB

codelab, graphisme & code : emoc / 2008-2024