A la ferme du code heureux, des codes, des programmes, broutent en champ libre.
Vie et Mort d'une Particule
Ceci est une exemple d'un système de particule rudimentaire en Processing qui montre comment implementer une notion de durée de vie d'un objet.
Cliquez pour faire apparaitre un feu d'artifice.

Your browser does not support the canvas tag.





ArrayList mesParticules; // on déclare l'ArrayList qui contiendra les objets particule

void setup() {
size(780, 240); // dimention de la fenetre
mesParticules = new ArrayList(); // initialisation de l'ArrayList
}

void draw() {
background(211); // on efface le fond du sketch
int nombreDeParticules = mesParticules.size(); // on questionne l'ArrayList pour savoir combien de particules il contient

for (int i = nombreDeParticules-1; i>=0 ; i--) { // on utilise une boucle pour acceder successivement a toutes les particules du ArrayList
Particule uneParticule = (Particule)mesParticules.get(i); // on recupere l'objet particule à l'index i
uneParticule.bouge(); // on demande à cette particule de bouger, on appel sa méthode bouge()
uneParticule.dessine(); // on demande à cette particule de se dessiner, on appel sa méthode dessine()
if (!uneParticule.vieillis()) mesParticules.remove(i); // on incremente l'age de la particule on verifie si elle est arrivé en fin de vie. On l'enleve de la liste le cas échéant.
}
}

void mousePressed() {
// on créé un nombre aléatoire de particule a chaque clic
int nombreParticule = (int)random(20, 50);
for (int i = 0; i<nombreParticule; i++) {
Particule uneNouvelleParticule = new Particule(mouseX, mouseY);
mesParticules.add(uneNouvelleParticule);
}
}

// définition de la classe Particule
class Particule {
// la balle se definie par une position, une taille et une couleur
float x = 0;
float y = 0;
float vitesseX; // vitesse de deplacement sur l'axe des X
float vitesseY; // vitesse de deplacement sur l'axe des Y
color couleur; // couleur de la particule
int ageMaximum; // age maximum
int age; // age actuelle

// la méthode constructeur appelée à la création de chaque nouvelle balle
Particule(float _x, float _y) {
// une nouvelle balle à besoin d'une position x, y et d'une taille
x = _x;
y = _y;
vitesseX = random(-2, 2); // on choisit une vitesse aléatoire
vitesseY = random(-2, 2);

age = 0;
ageMaximum = (int)random(50, 100); // on choisit un age maximum aléatoirement
couleur = color(random(200)); // chaque particule a sa propre couleur choisie aléatoirement à sa naissance
}

// méthode de la classe pour faire bouger la particule en fonction de sa vitesse
void bouge() {
x +=vitesseX;
y +=vitesseY;
}

// méthode de la classe pour dessiner la particule
void dessine() {
fill(couleur);
noStroke();
ellipse(x, y, 5, 5);
}

//méthode pour vieillir la particule et savoir si la particule est arrivée en fin de vie
boolean vieillis() {
age++; //: on incremente l'age de la particule
return age<=ageMaximum; // et on retourne si oui ou non la particule a atteint son age maximum
}
}