Annonce

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


#1 2017-09-11 17:16:41 Comment rejouer sketch processing

Bizarro
nouveau membre
Lieu: Salbris
Date d'inscription: 2017-09-11
Messages: 2

Comment rejouer sketch processing



Bonjour
Nouveau sur ce site et en programmation Processing, j'aimerais savoir comment rejouer le sketch ci-dessous en utilisant keyPressed par exemple. (Revenir au début du sketch, c'est à dire, les feuilles reviennent sur l'arbre).
Ce qui ce passe en l'état c'est que dès que l'on clique sur la souris, les feuilles s'envolent et c'est la fin du sketch.
Les feuilles restent au sol. Mais comment les faire revenir sur l'arbre comme au début du sketch?
Merci pour vos réponses.


Code:

PImage tree;
PImage [] pictures;
Leafs [] leaf = new Leafs[400];
boolean leavesfall = false;

void setup() {
  size(600, 600);
  frameRate(20);
  tree = loadImage("tree.png");
  pictures = new PImage [4];
  pictures[0] = loadImage("redleaf.png");
  pictures[1] = loadImage("brownleaf.png");
  pictures[2] = loadImage("orangeleaf.png");
  pictures[3] = loadImage("greenleaf.png");
  for (int i = 0; i < 400; i++ ) {
    float x = 0;
    float y = 0;
    while (dist (width/2, height/3, x, y) > 250) {
      x= random(20, 580);
      y= random(20, 375);
    }
    leaf [i] = new Leafs (x, y, pictures[int(random(0, 4))]);
  }
}

void draw() {
  background(255);
  image(tree, 0, 0, 600, 600); 

  // ellipse(400, 300, 700, 550);

  for (int i = 0; i < 300; i++) {   
    leaf[i].display();
    if (mousePressed) {
      leavesfall = true;
    }
    if (leavesfall) {
      leaf[i].fall();
    }
  }
}

class Leafs {
  float xpos;
  float ypos;
  float yspeed;
  float xspeed;
  float rot;
  PImage turnedLeaf;

  Leafs (float xIn, float yIn, PImage choose) {
    xpos = xIn;
    ypos = yIn;
    turnedLeaf = choose;
    yspeed = random(1, 4);
    xspeed = 2*cos(xIn);
    rot = 0;
  }

  void display () {
    pushMatrix();
    translate(xpos, ypos);
    rotate(rot);
    image(turnedLeaf, 0, 0, 20, 20);
    popMatrix();
  }

  void fall () {
    ypos = ypos + yspeed;
    xpos = xpos + xspeed;
    if (ypos > height-20) {
      yspeed = 0;
      xspeed = 0;
    }
    if (ypos < height-20) {
      rot = random(0, PI);
    }
  }
}

Dernière modification par Bizarro (2017-09-11 17:21:46)

Hors ligne

 

#2 2017-09-12 08:14:37 Re : Comment rejouer sketch processing

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

Re: Comment rejouer sketch processing



Bonjour,

Si tu souhaites que l'on t'aide, il est préférable d'avoir tous les éléments du programme pour les tester. Quand tu as des images, il faut créer une archive de ton fichier programme avec les images.
Voici ma proposition(non testée) :

PImage tree;
PImage [] pictures;
Leafs [] leaf = new Leafs[400];
boolean leavesfall = false;

void setup() {
  size(600, 600);
  frameRate(20);
  tree = loadImage("tree.png");
  pictures = new PImage [4];
  pictures[0] = loadImage("redleaf.png");
  pictures[1] = loadImage("brownleaf.png");
  pictures[2] = loadImage("orangeleaf.png");
  pictures[3] = loadImage("greenleaf.png");
  for (int i = 0; i < 400; i++ ) { 
    float x = 0;
    float y = 0;
    while (dist (width/2, height/3, x, y) > 250) {
      x= random(20, 580);
      y= random(20, 375);
    }
    leaf [i] = new Leafs (x, y, pictures[int(random(0, 4))]);
  }
}

void draw() {
  background(255);
  image(tree, 0, 0, 600, 600);  

  // ellipse(400, 300, 700, 550);

  for (int i = 0; i < 300; i++) {    
    leaf[i].display();
    if (mousePressed) {
      leavesfall = true;
    }
    if (leavesfall) {
      leaf[i].fall();
    }
  }
}

void keyPressed() {
  leavesfall = false;
  for (int i = 0; i < 300; i++) {    
    leaf[i].initialisation();
  }
}

class Leafs {
  PVector position;
  float xpos;
  float ypos;
  float yspeed;
  float xspeed;
  float rot;
  PImage turnedLeaf;

  Leafs (float xIn, float yIn, PImage choose) {
    position = new PVector(xIn, yIn);
    xpos = xIn;
    ypos = yIn;
    turnedLeaf = choose;
    yspeed = random(1, 4);
    xspeed = 2*cos(xIn);
    rot = 0;
  }

  void display () {
    pushMatrix();
    translate(xpos, ypos);
    rotate(rot);
    image(turnedLeaf, 0, 0, 20, 20);
    popMatrix();
  }

  void fall () { 
    ypos = ypos + yspeed;
    xpos = xpos + xspeed;
    if (ypos > height-20) {
      yspeed = 0;
      xspeed = 0;
    }
    if (ypos < height-20) {
      rot = random(0, PI);
    }
  }
  
  void initialisation() {
    xpos = position.x;
    ypos = position.y;
  }
}

Hors ligne

 

#3 2017-09-12 09:07:16 Re : Comment rejouer sketch processing

Bizarro
nouveau membre
Lieu: Salbris
Date d'inscription: 2017-09-11
Messages: 2

Re: Comment rejouer sketch processing



Merci Beaucoup,

Cela fonctionne, les feuilles reviennent, mais ensuite ne retombent pas au sol.
Je joins le dossier Data pour le test. Il manque une feuille, parce que 4 fichiers seulement.
Vous pouvez renommer celle qui manque (brownleaf.png) avec une autre.
Merci.

Dernière modification par Bizarro (2017-09-12 09:33:14)

Hors ligne

 

#4 2017-09-12 20:29:03 Re : Comment rejouer sketch processing

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

Re: Comment rejouer sketch processing



Il fallait réinitialiser aussi la vitesse.

Hors ligne

 

fil rss de cette discussion : rss

Pied de page des forums

Powered by FluxBB

codelab, graphisme & code : emoc / 2008-2017