Abbiamo quasi finito questa serie sulla programmazione orientata agli oggetti e in questo articolo discuteremo il principio OOP di astrazione - cioè, generalizzando un oggetto - e il suo uso nello sviluppo del gioco.
Nota: Sebbene questo tutorial sia scritto usando Java, dovresti essere in grado di utilizzare le stesse tecniche e concetti in quasi tutti gli ambienti di sviluppo di giochi.
L'astrazione è il principio di generalizzazione. Ciò richiede che passiamo da un'istanza specifica a un concetto più generalizzato pensando alle informazioni e alle funzioni di base di un oggetto.
Questo può sembrare un po 'strano, ma abbiamo già familiarità con il concetto di astrazione. Ad esempio, se dico la parola "auto", cosa ne pensi? Le probabilità sono che non stavamo pensando alla stessa macchina. Stavo pensando a un Mustang Boss 302 nero, che è un'istanza specifica di un'auto. Nessuno di noi ha sbagliato perché la parola auto è un concetto molto generale di un veicolo che usiamo per il trasporto (o ricreazione nel mio caso).
Lo stesso vale per i videogiochi. I videogiochi sono suddivisi in gruppi come RTS, RPG, Racing, ecc. Questi gruppi sono tutti concetti generali che descrivono il gameplay di un gioco. StarCraft II, Elder Scrolls V: Skyrim e Need for Speed sono tutti esempi specifici di questi concetti generalizzati.
Quindi, l'astrazione prende molte istanze specifiche di oggetti ed estrae le loro informazioni e funzioni comuni per creare un singolo concetto generalizzato che può essere usato per descrivere tutte le istanze specifiche come una.
L'astrazione è utile perché riduce tutto ai suoi principi più elementari. Questo può aiutare quando si incapsula la funzionalità di un oggetto perché può aiutare a identificare le informazioni importanti che dovrebbero essere rese visibili e le informazioni non importanti che possono essere rese nascoste.
L'astrazione aiuta anche con il principio Non ripetere te stesso. Prendendo in comune ciò che un gruppo di oggetti ha in comune e estrapolandolo, possiamo aiutare a prevenire il codice ridondante in ogni oggetto che a sua volta crea un codice più gestibile.
Come prima, usiamo i nostri tre giochi per vedere alcuni esempi concreti di questo principio in azione.
Per iniziare ad applicare l'astrazione agli asteroidi, pensa ai suoi oggetti. Ricordiamo che gli oggetti per gli asteroidi erano una nave, un asteroide, un disco volante e un proiettile. Ora pensa a ciò che ciascuno di questi oggetti ha in comune. Condividono stati, comportamenti o funzionalità? Prendendo questi elementi comuni che condividono tutti gli oggetti siamo in grado di astrarre questi elementi in una classe più generalizzata.
Ad esempio, una nave, un asteroide, un disco volante e un proiettile condividono tutti lo stesso comportamento per spostarsi sullo schermo. Puoi astrarre questo comportamento in una classe astratta che contiene le qualità comuni necessarie per spostare un oggetto. Queste qualità sarebbero stati come posizione e velocità, e il comportamento di in movimento.
La classe astratta in Java potrebbe essere simile alla seguente:
/ ** * Classe astratta per lo spostamento * / abstract class Movable public float velocityX; velocità fluttuante pubblicaY; posizione float pubblicaX; posizione del galleggiante pubblicoY; / ** * Funzione: esegue il comportamento (compito) dello spostamento della nave * / public void move () positionX + = velocityX; posizioneY + = velocityY;
Esistono altri stati, comportamenti e funzionalità comuni condivisi da tutti gli oggetti. Puoi pensarci? Questi possono essere tutti aggiunti in una classe astratta.
Una cosa che vuoi fare attenzione è la creazione di una classe blob. Una classe blob è una classe che tenta di gestire tutto da un gruppo di oggetti, anche quando ogni oggetto non condivide gli stessi stati, comportamenti e funzionalità. Solo perché una nave e un disco volante possono sparare non significa che dovresti mettere quel comportamento nella stessa classe astratta che è usata per descrivere tutti e quattro gli oggetti.
Dai un'occhiata al tutorial di Iain Lobb sulla composizione delle entità per vedere come evita questa situazione.
Come affermato molte volte prima, Tetris ha un solo oggetto, un Tetrimino. Tuttavia, ciò non impedisce a Tetris di astrarre alcune delle sue funzionalità. Un Tetrimino è disegnato quasi nello stesso modo del campo di gioco e degli altri giochi visivi. Ciò significa che è possibile astrarre questo comportamento di disegno in una singola classe a cui appartengono tutte le cose disegnate sullo schermo.
(Personalmente, mi piace chiamare una classe del genere drawable
, ma folletto
è anche un nome comunemente usato.)
Pac-Man è un po 'più interessante in termini di astrazione. Pac-Man, un fantasma e un pac-dot non condividono realmente stati, comportamenti o funzionalità comuni. Possono essere disegnati sullo schermo in modo simile, quindi è possibile creare una classe astratta per la gestione del disegno, ma non molto di più. Allora cosa fai? In questo caso, è perfettamente corretto creare più classi astratte per organizzare il codice.
Inizia con la classe per gestire il disegno per tutti e tre gli oggetti. Successivamente, togli il pac-punto dal gruppo poiché è l'oggetto che in realtà non appartiene agli altri. Questo lascia Pac-Man e un fantasma. Ora pensa a ciò che questi due oggetti hanno in comune e crea un'altra classe astratta per questi oggetti. Questa classe potrebbe contenere stati come direzione e velocità, e il comportamento di in movimento.
Con due classi astratte, riduci il codice ridondante che sarebbe stato necessario per creare i tre oggetti e spostalo in una posizione che può essere facilmente modificata e modificata.
Il principio di astrazione aiuta a ridurre il codice ridondante e crea un codice più gestibile. Tuttavia, l'astrazione di per sé non ci fa nulla se non facciamo realmente nulla con le classi astratte. Per questo, abbiamo bisogno di conoscere eredità che sarà discusso nel prossimo e ultimo articolo di questa serie.
Seguici su Twitter, Facebook o Google+ per tenerti aggiornato con gli ultimi post.