Se preferisci seguire dei video, puoi acquistare i miei video corsi in italiano di Introduzione alla programmazione e Introduzione all'arte generativa con Processing qui.

Array di oggetti: Bouncing Ball, parte 4

È finalmente arrivato il momento di mettere insieme quanto imparato nell’ultimo mese, programmazione ad oggettiarray, e di concludere il nostro esercizio Bouncing Ball. La domanda a cui oggi daremo, finalmente, risposta è sempre la stessa: come faccio a creare decine o centinaia di oggetti?

Un array di oggetti

Riprendiamo il codice dell’esercizio Bouncing Ball dove l’avevamo lasciato. Il primo passo è dichiarare un array di oggetti di tipo Ball.

La prima riga del nostro programma serviva per dichiarare una variabile di tipo Ball (il nostro oggetto) di nome myBall.

Ball myBall;

Sostituiamo questa riga di codice con un array di oggetti: per mantenere il mio codice chiaro e leggibile modifico anche il nome della variabile da myBall (che identifica un oggetto solo) a myBalls, utilizzando il plurale.

Ball[] myBalls;

Nella funzione setup() dove, precedentemente, inizializzavo l’oggetto ora devo dichiarare grandezza del mio array. Decido di avere a disposizione 100 oggetti:

myBalls = new Ball[100];

Non mi resta che inizializzare tutti gli oggetti richiamando il constructor all’interno della nostra classe, per sveltire, utilizzo un ciclo for:

for(int i = 0; i < myBalls.length; i++) {
 myBalls[i] = new Ball(random(width), random(height), random(0.5 ,5), random(0.5, 5));
 }

Debugging di un array di oggetti

Con l’ultima porzione di codice abbiamo riempito il nostro array occupando tutte e 100 le caselle con 100 oggetti differenti assegnando a ciascuno di essi, grazie alle funzioni random, la posizione X e Y e la velocità sull’asse orizzontale e verticale.

Se volessimo essere sicuri di averlo fatto nel modo corretto, potremmo pensare di utilizzare, come abbiamo sempre fatto finora, la funzione println(myBalls);

Debugging an Array in Processing

Come potete vedere nell’immagine, il testo riportato nella console non è per niente chiaro. Trattandosi di un array, proviamo a sostituire println con printArray:

Processing: using printArray

Un risultato leggermente migliore: vediamo che ci sono effettivamente 100 oggetti, numerati da 0 a 99, ma facciamo ancora fatica a capire se il contenuto del nostro array è corretto.

Accedere alle variabili interne agli oggetti

Nei nostri esercizi relativi agli oggetti abbiamo imparato a usare la dot notation per richiamare i metodi all’interno degli oggetti. La riga di codice myBall.display() serviva per richiamare la funzione display() contenuta nell’oggetto creato precedentemente.

Utilizzando lo stesso metodo possiamo accedere anche alle variabili interne all’oggetto: scrivendo, ad esempio, myBall.ellipseX; verrà restituito il valore di ellipseX.

Dal momento che, però, non stiamo lavorando con un singolo oggetto ma con un array abbiamo due possibilità:

  1. accedere ai dati di un oggetto specifico: println(myBalls[34].ellipseX);
  2. utilizzare la variabile contatore nel nostro ciclo for per visualizzarli tutti

Aggiungiamo questa riga di codice all’interno del nostro ciclo for:

println("["+i+"] - ellipseX: " + myBalls[i].ellipseX);

Ed ecco che il risultato è finalmente comprensibile:

Processing accessing variables in objects

Bouncing Balls, parte 4

Concludiamo modificando il codice contenuto in draw() per vedere tutte e cento le nostre sfere rimbalzare sullo schermo.

Ball[] myBalls;

void setup() {
  size(700, 500);
  myBalls = new Ball[100];
  for(int i = 0; i < myBalls.length; i++) {
    myBalls[i] = new Ball(random(width), random(height), random(0.5 ,5), random(0.5, 5));
  }  
}

void draw() {
  background(0);
  for(int i = 0; i < myBalls.length; i++) {
    myBalls[i].display();
    myBalls[i].move();
    myBalls[i].checkEdges();
  } 
}

Non ho incluso il codice della classe Ball perché non è stata toccata nemmeno una riga di codice. Se avete fatto tutto correttamente, il risultato sarà il seguente:

Bouncing Ball Final

Federico

Federico Pepe è un Ableton Certified Trainer, un esperto di tecnologie musicali, un creative coder per passione e, soprattutto, una persona a cui piace molto insegnare. Questo sito è il luogo dove, da diversi anni, raccoglie articoli, tutorial e guide. Per maggiori informazioni, visita la pagina "About me".

Potrebbero interessarti anche...

Lascia un commento

Il tuo indirizzo email non sarà pubblicato.

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.