Quanti thread dovrebbe usare un gioco Android?


28

Come minimo, un gioco OpenGL per Android ha un thread UI e un thread Renderer creati da GLSurfaceView. Renderer.onDrawFrame()dovrebbe fare un minimo di lavoro per ottenere il più alto FPS. La fisica, l'intelligenza artificiale, ecc. Non devono eseguire tutti i frame, quindi possiamo inserirli in un altro thread. Ora abbiamo:

  1. Thread di rendering - Aggiorna animazioni e disegna polis
  2. Thread di gioco - Aggiornamenti di logica e periodica, AI, ecc
  3. Thread dell'interfaccia utente - Solo interazione dell'interfaccia utente Android

Dato che non vuoi mai bloccare il thread dell'interfaccia utente, eseguo un altro thread per la logica di gioco. Forse non è necessario però? C'è mai un motivo per eseguire la logica di gioco nel thread del renderer?

Risposte:


18

Chris Pruett di Google parla di questo problema nel suo blog di Replica Island . Poiché eglSwapBuffers () è una chiamata di blocco nel thread GLSurfaceView, la presenza di un codice di logica di gioco in un altro thread consente l'esecuzione durante la chiamata dei buffer di scambio. Questo è importante se il tuo gioco è complesso e vuoi raggiungere 60 frame al secondo.

È possibile scaricare il codice sorgente per Replica Island e vedere come lo hanno fatto. Ho implementato qualcosa di simile per il mio gioco (con i tre thread di cui hai parlato) e funziona benissimo.


2

Android supporta i thread Java standard. Puoi usare i thread standard e gli strumenti del pacchetto java.util.concurrent per mettere le azioni in background. L'unica limitazione è che non è possibile aggiornare direttamente l'interfaccia utente dal processo in background.

Se è necessario aggiornare l'interfaccia utente da un'attività in background, è necessario utilizzare alcune classi specifiche di Android. Puoi usare la classe android.os.Handler per questo o per la classe AsyncTasks.

Per maggiori dettagli, consulta il seguente link ....

http://mindstick.com/Articles/7a9205de-bae7-48ba-81b5-2b2ec161d672/?Thread%20in%20Android

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.