How can I let all shapes rotating by a mouseclick

edited March 2017 in Questions about Code

Hello,

this is my processing code so far but I want to change it. I create a rotation shape in the center but I want that all shapes (ellipse, rectangle, triangle) "shake" by clicking on the mouse. Can someone help me?

// globale Variablen
Rechteck[] rectangle;
Dreieck[] triangle;
Kreis[] circle;
float angle;
float jitter;

void setup() 
{ 
  // Konstruktoren
  size(500, 500);
  background(255);
  rectangle = new Rechteck[900];
  triangle = new Dreieck[900];
  circle = new Kreis[900];
}

void draw() {

  // for-Schleife zeichnet mehrere Kreise und verschiebt sie jedesmal um 150px in der y-Achse
  for (int i=0; i <= 800; i = i+150) {
    float x = 100;
    float y = 100 + i;
    // prüft ob Maus gedrückt wurde wenn ja erstellt er in zufälliger Position weitere Kreise
    if (mousePressed == true) {
      x += random(-330, 140);
      y += random(-150, 20);
    }
    // erstellt neue Kreis Klasse im Array 
    circle[i] = new Kreis(x, y);
    // ruft Display Funktion in der Kreis Klasse auf 
    circle[i].display();
  }

  // for-Schleife zeichnet mehrere Dreicke und verschiebt sie jedesmal um 160px in der y-Achse
  for (int i=0; i <= 800; i = i+160) {
    // zeichnet mehrere Dreiecke
    float x = 380;
    float y = 160 + i;
    // prüft ob Maus gedrückt wurde wenn ja erstellt er in zufälliger Position weitere Dreiecke
    if (mousePressed == true) {
      x += random(-130, 140);
      y += random(-150, 120);
    }
    // erstellt neue Dreieck Klasse im Array 
    triangle[i] = new Dreieck(x, y);
    // ruft Display Funktion in der Dreieck Klasse auf
    triangle[i].display();
  }

  // for-Schleife zeichnet mehrere Rechtecke und verschiebt sie jedesmal um 150px in der y-Achse
  for (int i=0; i <= 800; i = i+150) {
    float x = 250;
    float y = 100 + i;
    // prüft ob Maus gedrückt wurde wenn ja erstellt er in zufälliger Position weitere Rechtecke
    if (mousePressed == true) {
      x += random(-130, 240);
      y += random(-50, 120);
    }
    // erstellt neue Rechteck Klasse im Array 
    rectangle[i] = new Rechteck(x, y);
    // ruft Display Funktion in der Rechteck Klasse auf
    rectangle[i].display();
  }

    // erstellt alle paar Sekunden neuen zufälligen Winkel  
    if (second() % 2 == 0) {  
      jitter = random(-0.5, 0.5);
    }
    // erstellt neue Rechtecke in Rotation 
    angle = angle + jitter;
    float c = cos(angle);
    translate(width/2, height/2);
    rotate(c);
    rect(0, 0, 20, 100);

}

class Dreieck {
  // globale Variablen
  color c;
  float xpos1;
  float ypos1;
  float xpos2;
  float ypos2;
  float xpos3;
  float ypos3;
  float xspeed;

  Dreieck(float x, float y) {
    c = color(0);
    xpos1 = x;
    ypos1 = y;
    xpos2 = xpos1+60;
    ypos2 = ypos1-60;
    xpos3 = xpos2-60;
    ypos3 = ypos2-60;
  }

  void display() {
    // färbt die Dreicke
    stroke(153);
    fill(122, 197, 205);
    // zeichnet Dreieck
    triangle(xpos1, ypos1, xpos2, ypos2, xpos3, ypos3);
  }
}

class Kreis {
  // globale Variablen
  color c;
  float xpos;
  float ypos;

  Kreis(float x, float y) {
    c = color(0);
    xpos = x;
    ypos = y;
  } 

  void display() {
    // färbt die Kreise
    fill(180, 238, 180);
    // zeichnet Kreis
    ellipse(xpos, ypos, 100, 100);
  }
}

class Rechteck {
  // globale Variablen
  color c;
  float xpos;
  float ypos;


  Rechteck(float x, float y) {
    c = color(0);
    xpos = x;
    ypos = y;
  } 

  void display() {
    // färbt die Rechtecke
    fill(255,193,193);
    // zeichnet Rechteck
    rectMode(CENTER);
    rect(xpos, ypos, 100, 100);
  }
}
Tagged:

Answers

  • Do you mean you click anywhere and all wigglle or rather you click one item specifically and only this starts?

    For the latter look at dist() in the reference ; place it in a function mouseTrigger or whatever and if(dist(.... set a boolean isShaking to true

    In the display of the function say if(isShaking..... and then eh add a random value to the position

  • Hello again, Thank u for your help. Where should I paste the code?can u Explain it for me,I am a beginner and I try to understand it.

  • I asked a question that you didn't answer

    Write a function mousePressed- see the reference

    For loop over all arrays, use if(dist....

    if true set boolean and quit function using return;

  • @serhan You need to clarify:

    Do you mean you click anywhere and all wigglle or rather you click one item specifically and only this starts?

    Also by any chance would you code be improved by adding background(255); as the first line in draw, Line 19?

    Kf

Sign In or Register to comment.