È meglio disegnare la mia grafica o importare immagini?

2

Sto per avviare un clone di Tetris usando Java come linguaggio di programmazione. Mentre stavo progettando come sarebbe stato fatto, mi sono imbattuto in questa domanda:

Quale sarebbe meglio, se mai avessi qualche differenza, per quanto riguarda le prestazioni 1 , per disegnare il mio gioco?

Per una questione di semplicità, userò una griglia di sfondo come esempio. Il codice seguente verrà eseguito nel ciclo di aggiornamento della grafica:

1) Per eseguire il disegno usando la mia variabile graphics g , come questa

g.setColor(Color.DARK_GRAY);                                                       
for(int x = 0; x < COL_COUNT; x++) {                                               
    for(int y = 0; y < VISIBLE_ROW_COUNT; y++) {                                   
        g.drawLine(0, y * TILE_SIZE, COL_COUNT * TILE_SIZE, y * TILE_SIZE);        
        g.drawLine(x * TILE_SIZE, 0, x * TILE_SIZE, VISIBLE_ROW_COUNT * TILE_SIZE);
    }                                                                              
}   

o

2) precarica un'immagine come questa:

BufferedImage img = null;
try {
    img = ImageIO.read(new File("grid.jpg"));
} catch (IOException e) {
}

e quindi usa la mia grafica per disegnarla usando Graphics drawImage :

g.drawImage(img, x, y, null)

1 - So che un gioco Tetris non è così affamato di prestazioni, ma credo che ciò non invalida la domanda.

    
posta user2018675 18.06.2014 - 02:42
fonte

2 risposte

4

Considera di disegnarlo in codice, ma disegnalo solo una volta e memorizzalo nella cache.

Quando si disegna in modo procedurale lo stesso, grafico statico ogni fotogramma, non si dovrebbe generarlo ripetutamente usando gli stessi for-loops. Disegnalo una volta su un'immagine bufferizzata, quindi incollalo per ogni fotogramma.

In questo modo la decisione tra creare proceduralmente un grafico e caricarlo da un file diventa solo una questione di sviluppo-tempo (cos'è più veloce - disegnarlo in un editor grafico o scrivere il codice per disegnarlo?), caricamento-tempo ( cos'è più veloce: caricare e decodificare un file grafico o eseguire il codice per disegnare l'immagine?). Le risposte a queste due domande variano molto sulla natura dell'immagine e sulle tue capacità di artista grafico o programmatore.

Un terzo aspetto è il file. Nella maggior parte dei casi, il codice eseguibile richiesto per generare un'immagine sarà più piccolo del file immagine codificato, quindi è spesso possibile ridurre la dimensione totale dell'applicazione generando procedimenti procedurali. Oggigiorno le dimensioni delle applicazioni non sono importanti per un'applicazione desktop. Ma ci sono almeno due casi in cui ogni kB conta: applicazioni per smartphone (gli utenti saranno riluttanti a scaricare un'app di grandi dimensioni quando hanno un piano dati limitato) e applicazioni web (ogni secondo di tempo di caricamento aggiuntivo fa sì che più utenti perdano la pazienza e chiudano la scheda).

    
risposta data 18.06.2014 - 09:08
fonte
4

Hai già entrambe le alternative, quindi cosa ti impedisce di eseguire 1000 volte ciascuna di esse e controllare i tempi medi per ciascuna? Quindi, dopo, è solo una questione di prendere il più veloce.

Una volta terminato il test, aggiorna la tua domanda e facci sapere.

    
risposta data 18.06.2014 - 08:57
fonte

Leggi altre domande sui tag