SPACE INVADERS - GaglianoMattia4CinfoPeano/SPACE-INVADERS-INFO-4C GitHub Wiki
La prima parte del progetto consiste nel predisporre l'introduzione che verrà mostrata all'avvio del programma. Per prima cosa, si è creata la classe SpaceInvaders (che contiene il main) e che estende la classe JFrame, con cui potremo creare la finestra per l'utilizzo dell'interfaccia grafica. Per poter fare in modo che la chiusura della finestra corrisponda anche all'interruzione del programma, inseriamo anche il comando "this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE)" nel costruttore della classe SpaceInvaders. Infine, si crea la "tela" su cui disegnare lo sfondo e gli elementi del gioco, da inserire successivamente nella finestra di gioco. Questa tela, rappresentata dalla classe Canvas, viene estesa nella classe Space, in cui peraltro si imposta lo sfondo nero e la dimensione del canvas. Successivamente viene creata la classe Intro, che estende la classe Space e quindi le funzionalità della classe Canvas. Pertanto, si sovrascrive il metodo paint() di quest'ultima utilizzando un @Override e passando un oggetto di tipo Graphics (g). A questo punto andiamo ad aggiungere elementi grafici alla schermata di gioco agendo sull'oggetto g e modificando il colore e le dimensioni della scritta che comparirà. Una volta costruita la nostra introduzione, che rappresenterà una scritta statica, creiamo un oggetto di tipo Intro nel costruttore di SpaceInvaders, lo aggiungiamo alla finestra, lo rendiamo visibile e lanciamo il metodo run() per avviare l'introduzione. Il metodo run() richiama al suo interno il metodo repaint(), che a sua volta richiama semplicemente il metodo paint(). Schermata di Introduzione più Interessante Per far si che venga un risultato più bello, facciamo in modo che il metodo paint() venga ripetuto più volte con dimensioni sempre minori. Per questo, creiamo un attributo i nella classe Intro e modifichiamo il metodo run() per fare in modo che resetti lo sfondo della schermata a nero e che dia inizio a un ciclo for (con i che decrementa partendo da 100) in cui richiamare il meotodo repaint(), e quindi riscrivere l'introduzione. Ma per far sì che le dimensioni siano sempre più piccole si modifica il metodo paint() così che le dimensioni delle scritte siano sempre più piccole. Eliminazione dello sfarfallio Per eliminare il problema dello sfarfallio, dobbiamo fare in modo che l'introduzione venga disegnata su due canvas diversi, per sostituire poi una schermata con la successiva e rendere l'animazione più fluida. Utilizziamo quindi la funzionalità BufferStrategy della classe Canvas, creando un oggetto di tipo BufferStrategy (strategy) nella classe Intro. Dopodiché si inseriscono, nel metodo run(), i comandi "createBufferStrategy(2)" e "strategy = getBufferStrategy()" per creare due buffer che conterranno un canvas ciascuno. Successivamente, si usa il comando "Graphics2D g = (Graphics2D) strategy.getDrawGraphics()" nel metodo paint, con cui si chiede il buffer in cui comporre la nuova immagine. Dopo aver finito di disegnare, si usa il comando g.dispose che rilascia le risorse create per la composizione dell'immagine e, in conclusione, il comando strategy.show per visualizzare la nuova immagine sullo schermo.