Objektorientiertes Animieren #02 (wandern) in Processing

Hinzugefügt am von Steffen Fiedler

Powered by Processing.js

Im zweiten Teil wird das feste Ziel gegen eine Richtung getauscht. Diese Verändert sich von Bild zu Bild um einen Bereich von -0.15 bis 0.15 und wird auf die Position addiert. Damit die Geschwindigkeit der Gizmos konstat ist, führen wir normalize() vor der Addition auf die Richtung aus (damit Länge von 1, siehe Normalenvektor). Zum Schluss wird die aktuelle Position auf ein Verlassen der Zeichenfläche überprüft - bei Eintritt kehren wir die Richtung auf der entsprechenden Achse um.

Der Sketch

Gizmo giz[] = new Gizmo[10];

void setup () {
  size (550, 240);
  background (76);
  
  for (int i=0; i < giz.length; i++) {
    float x = random (width);
    float y = random (height);
    giz[i] = new Gizmo (x, y);
  }
}

void draw () {
  noStroke ();
  fill (76, 2);
  rect (0, 0, width, height);
  
  stroke (236);
  for (int i=0; i < giz.length; i++) {
    giz[i].move ();
    point (giz[i].position.x, giz[i].position.y);
  }
}
class Gizmo {
  
  PVector position;
  PVector direction;
  
  float spin = 0.15;
  
  Gizmo (float theX, float theY) {
    position    = new PVector (theX, theY);
    direction   = new PVector ();
    direction.x = random (-1, 1);
    direction.y = random (-1, 1);
  }
  
  void move () {
    direction.x += random (-spin, spin);
    direction.y += random (-spin, spin);
    direction.normalize ();
    position.add (direction);
    
    if (position.x < 0 || position.x > width) {
      direction.x *= -1;
    }
    if (position.y < 0 || position.y > height) {
      direction.y *= -1;
    }
  }
}