0t1 steckt noch in den Kinderschuhen.

Flimmerndes Farbspiel in p5.js

Das Ziel des Tutorials ist es, Rechtecke zu erstellen, die durch Interaktionen mit der Maus an beliebiger Stelle platziert werden können. Durch Klicken und Ziehen mit der Maus können die gezeichneten Rechtecke außerdem ihre Farbe ändern.

Canvas anlegen

Zuallererst wird in der Setup Function die Canvas angelegt. Hierfür werden die Werte auf 600 x 400 Pixel gesetzt. Die Farbe des Hintergrunds wird in der Funktion draw festgelegt. Für einen schwarzen Hintergrund wird der Wert auf 0 gesetzt.

function setup() {
  createCanvas(600, 400); //groesse von dem Canvas festlegen 
}

function draw() {
  background(0);          //Hintergrund auf 0 setzen, fuer farbe Schwarz
}

Rechtecke erstellen

Es wird ein Feld initialisiert, welches später die Rechtecke enthalten wird.

let rechtecke = [];           //Array rechtecke initialisieren

In der Klasse rechteck wird die Methode show angelegt, die die Rechtecke bei Ausführung sichtbar macht. Zunächst werden die Rechtecke mit Platzhalterwerten erzeugt. Die Parameter x und y stehen für die Koordinaten der Mittelpunkte und r für die Größe der Rechtecke. Außerdem wird das Aussehen der Rechtecke festgelegt. Die Rechtecke haben keine Füllung, aber eine Kontur die vorerst mit den unten angegebenen Werten auf ein helles Pink gesetzt wird. Hierfür wird das Farbmodell RGBA verwendet. Die ersten drei Werte geben die Rot-, Grün- und Blauwerte an. Mit dem vierten Wert kann die Deckkraft angepasst werden.

class rechteck { 
    show() {
        rect(x, y, r * 2);               /*Rechteck erzeugen mit x und y Koordinate, r fuer Groesse,
                                          Achtung: Es sind noch keine Werte festgelegt*/
        strokeWeight(4);                  //Konturstaerke der Rechtecke
        stroke(245, 40, 145, 65);         //Farbe der Kontur im Farbmodell rgba
        nofill();
      }
}

Bei einem Mausklick wird die Funktion MouseDragged aufgerufen. Für die Größe der Rechtecke wird die Variable r deklariert. Diese soll bei jedem neuen Rechteck einen zufälligen Wert zwischen 10 und 50 Pixel bekommen.
Außerdem wird die Variable b initialisiert. Diese erzeugt neue Instanzen, also Rechtecke, der Klasse rechteck.
Die x- und y-Koordinaten richten sich dabei an der Mausposition aus und werden an die Klasse rechteck übermittelt. Für die Größe wird die eben initialisierte Variable r verwendet. Mit der Push-Funktion wird das Array rechtecke um die Instanz b erweitert.  

function mouseDragged(){ 
    let r = random (10,50);                   //Groesse r wird zwischen 10 und 50 festgelegt
    let b = new rechteck(mouseX,mouseY,r);    //neue Instanz der Klasse rechteck wird erzeugt, 
                                                Parameter werden gesetzt*/
    rechtecke.push(b);                        //das Array wird um die neue Instanz erweitert
  }

In der Klasse rechteck wird zudem noch der Konstruktor benötigt, der die Parameter and die Methode show übergibt. Dafür werden in der Methode show die Parameter angeglichen.

class rechteck {
    constructor(x, y, r) {                  //Parameter aus der neuen Instanz von mouseDragged
        this.x = x;                         //Parameter werden uebergeben
        this.y = y;
        this.r = r;
    }
    
    show() {
        rect(x, y, r * 2);                /*Achtung: Es sind noch keine Werte festgelegt*/
        strokeWeight(4);                  
        stroke(245, 40, 145, 65);           
        nofill();
      }
}

Ebenfalls müssen die Parameter des Konstruktors in das rect der Methode show übergeben werden.

class rechteck {
    constructor(x, y, r) {                  //Parameter aus der neuen Instanz von mouseDragged
        this.x = x;                         //Parameter werden uebergeben
        this.y = y;
        this.r = r;
    }
    
    show() {
        rect(this.x, this.y, this.r * 2); //Parameter aus Konstruktor werden uebernommen
        strokeWeight(4);                    
        stroke(245, 40, 145, 65);             
        nofill();                     
      }
}

Anschließend wird in der Funktion draw eine for-Schleife angelegt. Die Schleife wird in Abhängigkeit zur Länge des Felds ausgeführt. Mithilfe der Methode show können so die Rechtecke ausgegeben werden.

function draw() {
  background(0);

  for (let i=0; i<rechtecke.length; i++) {    //Schleife for in Abhaengigkeit des Arrays rechtecke
    rechtecke[i].show();                      //Ausgabe der Rechtecke 
  }
}

Nun ist die erste Durchführung möglich. Bei Maus klicken und ziehen sollten nun verschieden große Rechtecke erscheinen.


Bewegung der Rechtecke

Als nächstes wird eine weitere Methode festgelegt. Mithilfe der Methode move bewegen sich die Rechtecke. Die x- und y-Koordinaten variieren per Zufall um Werte zwischen -5 und 5 Pixel. So entsteht eine minimale Bewegung der Rechtecke. Möchte man, dass sich die Rechtecke weniger bewegen, so können die Werte heruntergesetzt werden.

class rechteck {
    constructor(x, y, r) {                  //Parameter aus neuer Instanz von mouseDragged
        this.x = x;                         //Parameter werden uebergeben
        this.y = y;
        this.r = r;
    }
    
    show() {
        rect(this.x, this.y, this.r * 2); 
        strokeWeight(4);                    
        stroke(245, 40, 145, 65);           
        nofill();                     
      }

    move() {                               //Bewegung der x und y Koordinaten, der Instanzen
        this.x = this.x + random(-5, 5);
        this.y = this.y + random(-5, 5);
    }
}

Die Methode move wird in der For-Schleife aufgerufen.

for (let i=0; i<rechtecke.length; i++) {      //In Funktion draw
    rechtecke[i].show();                      
    rechtecke[i].move();                      //Aufrufen und Umsetzung der Methode move 
  }

Interaktive Farbänderung

Die Farbe der Rechtecke soll sich durch Mausklicken ändern. Für die vier Werte des RGBA-Farbmodells werden nun Variablen initialisiert. Diesen werden zunächst feste Werte zugewiesen.

let a = 255;              //Variablen initialisieren und Werte zuweisen, am Anfang des Codes
let b = 110;
let c = 0;
let d = 50;

In der Methode show werden die Farbwerte von fill durch die eben initialisierten Variablen ersetzt.

show() {                                    //In Klasse rechteck verändern
        rect(this.x, this.y, this.r * 2); 
        strokeWeight(4);                   
        stroke(245, 40, 145, 65);           //Werte werden durch Variblen ersetzt
        nofill();                     
      }

Mit einer if-Schleife, werden die Farbänderungen ausgeführt. Die Bedingung für die Ausführung ist die gedrückte Maustaste. Wenn dies erfüllt ist, ändern die Variablen zufällig ihre Werte und somit auch die Farbe der Rechtecke.

if (mouseIsPressed === true){             /*Farbaenderung aller Rechtecke durch Variablenaenderung,
                                          In Funktion draw*/
    a = 155 + random (-30, +20);          //random veraendert die Farben zufaellig 
    b = b + random (-10, +10);
    c = c + random (-10, +10);
    d = d + random (-0.10, +0.10);
  }

Bei korrekter Durchführung können nun Rechtecke gezeichnet werden, die sich leicht bewegen und bei jedem Mausklick ihre Farbe verändern.

Quellcode und Quellen

Finaler Quellcode

Basis des Tutorials


© 0t1

Cookies

0t1 mag keine Kekse (und kein Tracking). Wir verwenden lediglich notwendige Cookies für essentielle Funktionen.

Wir verwenden Schriftarten von Adobe Fonts. Dafür stellt dein Browser eine Verbindung zu den Servern von Adobe in den USA her. Wenn du unsere Seite nutzen möchtest, musst du dich damit einverstanden erklären.

Weitere Informationen in unserer Datenschutzerklärung.