Gioco Java. Precaricare oggetti e riutilizzare e creare oggetti in fase di runtime [chiuso]

2

Attualmente sto sviluppando il mio primo gioco in linguaggio Java.
Il gioco è un corridore senza fine con ostacoli da evitare e nemici da uccidere. Purtroppo ancora non ho esperienza abbastanza e molte volte sto solo improvvisando. Non ho idea se il mio metodo di caricamento degli ostacoli sia buono o cattivo in termini di prestazioni (quanto velocemente un gioco funziona, quanto fps) .

Attualmente il mio codice è progettato in un modo in cui ho una classe di livello e nel costruttore di livello creo tutti gli ostacoli che verranno utilizzati in quel livello. Gli ostacoli sono mostrati casualmente nella finestra di gioco. Quando è necessario un ostacolo, lo stato dell'ostacolo viene resettato e l'ostacolo viene reso. Quando l'ostacolo diventa rendering offscreen e le funzioni di aggiornamento vengono interrotte. L'oggetto ostacolo è ancora nella memoria dell'heap pronto per essere riutilizzato. Quindi non esiste la creazione di oggetti al volo e quindi la rimozione dei riferimenti.

Non ho idea se è valido per la velocità di esecuzione del gioco o non buono o irrilevante? Che dire di Garbage Collector è una buona pratica o no? Lo codifico in questo modo perché è più semplice per me perché gli oggetti ostacolo sono in realtà piuttosto complicati e sarebbe più difficile per me codificarlo nel modo in cui li creo al volo a caso. E ci sono probabilmente 40 o 50 oggetti sempre pronti per l'uso? Gli oggetti sono referenziati tramite ArrayList di ArrayLists.

Quindi questo design accettabile o spazzatura completa? Qual è il tuo pensiero?

    
posta Bogdan 21.12.2015 - 22:23
fonte

2 risposte

4

Dovresti implementare entrambe le opzioni e profilare il tuo gioco

(Ulteriori informazioni sulla creazione di profili: JVMMonitor )

L'idea di base è:

-Crea oggetti in fase di runtime: Migliore utilizzo della memoria (potrebbe non essere utilizzata meno memoria), ma codice più lento (meno FPS).

-Preload Objects: codice più veloce (più FPS), ma uso peggiore della memoria (potrebbe non essere più utilizzata la memoria, ma la usi per più tempo).

IMHO, in genere l'idea migliore è precaricare gli oggetti e le immagini. Tuttavia, dovresti testare il tuo caso e decidere cosa è meglio per il tuo progetto.

    
risposta data 22.12.2015 - 09:07
fonte
2

Il riutilizzo degli oggetti è la caratteristica principale di un pool di oggetti .

Se seminato durante il caricamento del livello, può consentire costose inizializzazioni di oggetti senza intodurre i picchi di prestazioni durante il gioco.

Laddove le dimensioni del pool sono ottimizzate per soddisfare i requisiti di gameplay e piattaforma, in genere migliorano le prestazioni in tempo reale.

Ma ricorda di profilo, è importante testare qualsiasi ipotesi.

    
risposta data 22.12.2015 - 10:12
fonte

Leggi altre domande sui tag