Implementazione delle regole con una classe
Se sono necessarie più istanze dello stesso oggetto è utile definire e usare una classe:
// height100 lines=auto
class Cerchio {
constructor() { // PROPRIETÀ
this.pos = createVector(random(width),random(height));
this.vel = createVector( 1.7, 1.9 );
}
display() { // VISUALIZZAZIONE
circle( this.pos.x, this.pos.y, 6 );
}
update() { // AGGIORNAMENTI
this.pos.add( this.vel );
if (this.pos.x < 0 || this.pos.x > width) {
this.vel.x = -this.vel.x;
}
if (this.pos.y < 0 || this.pos.y > height) {
this.vel.y = -this.vel.y;
}
}
}
let cerchio1; // istanze della classe
let cerchio2;
function setup() {
cerchio1 = new Cerchio(); // creazione istanze
cerchio2 = new Cerchio();
}
function draw() {
background(220);
cerchio1.display(); // visualizzazione e aggiornamento istanze
cerchio1.update();
cerchio2.display();
cerchio2.update();
}
Quando i codici non sono particolarmente complessi, le operazioni di aggiornamento vengono spesso inserite nel metodo display()
(a volte chiamato anche render()
o draw()
). Conviene però tenere separate le operazioni perché potrebbe essere utile o necessario utilizzare le proprietà delle istanze per visualizzazioni alternative.
Provare a far disegnare solo una linea di connessione fra i due cerchi, sostituendo le chiamate ai metodi display()
con un'istruzione line()
:
let p1 = cerchio1.pos;
let p2 = cerchio2.pos;
line(p1.x, p1.y, p2.x, p2.y);
cerchio1.update();
cerchio2.update();