2011-02-13 11 views
9

Sono in procinto di scrivere un gioco per Android e mi sembra di avere problemi di prestazioni con il disegno sulla tela. Il mio gioco ha più livelli e ognuno ha (ovviamente) un diverso numero di oggetti.Prestazioni di drawBitmap Android per un sacco di bitmap?

La cosa strana è che in un livello, che contiene 45 immagini, funziona perfettamente (quasi 60 fps). Tuttavia, un altro livello, che contiene 81 immagini, funziona a malapena (11 fps); è praticamente ingiocabile. Sembra strano a qualcuno oltre a me?

Tutte le immagini che uso sono .png e l'unica differenza tra i suddetti livelli è il numero di immagini.

Cosa sta succedendo qui? La tela non può semplicemente disegnare queste immagini ogni loop di gioco? Come raccomanderesti di migliorare questa performance?

Grazie in anticipo.

risposta

1

Penso che this lecture ti aiuterà. Vai al minuto 45. C'è un grafico che confronta il metodo Canvas e il metodo OpenGl. Penso che sia la risposta.

3

Sembra strano anche a me. Sto anche sviluppando un gioco, un sacco di livelli, posso facilmente avere 100 oggetti di gioco sullo schermo, non ho visto un problema simile.

Se usato correttamente, drawbitmap dovrebbe essere molto veloce; è poco più di un comando di copia. Non disegno nemmeno i cerchi in modo nativo; Ho Bitmap di cerchi pre-renderizzati.

Tuttavia, le prestazioni di Bitmap in Android sono molto sensibili a come lo si fa. La creazione di bitmap può essere molto costosa, in quanto Android può automaticamente ridimensionare automaticamente le png che richiedono un uso intensivo della CPU. Tutte queste cose devono essere fatte esattamente una volta, al di fuori del ciclo di rendering.

Sospetto che stiate cercando nel posto sbagliato. Se crei e utilizzi lo stesso tipo di immagini negli stessi modi, raddoppiare il numero di immagini dello schermo non dovrebbe ridurre le prestazioni di un fattore di oltre 4. Al massimo dovrebbe essere lineare (un fattore di 2).

Il mio primo sospetto sarebbe che la maggior parte del tempo della CPU viene speso nel rilevamento delle collisioni. A differenza del disegno di bitmap, questo di solito sale come il quadrato del numero di oggetti interagenti, perché ogni oggetto deve essere testato per la collisione contro ogni altro oggetto. Hai raddoppiato il numero di oggetti di gioco, ma la tua prestazione è scesa a un quarto, ovvero in base al quadrato del numero di oggetti. Se questo è il caso, non disperare; ci sono modi per fare il rilevamento delle collisioni che non crescono come il quadrato del numero di oggetti.

Nel frattempo, eseguivo test di base. Cosa succede se in realtà non disegni metà degli oggetti? Il gioco funziona molto più velocemente? In caso contrario, non ha nulla a che fare con il disegno.

0

ho incontrato un problema simile con prestazioni - vale a dire, il livello 1 ha grande e il livello 2 non ha

Girato non era il rendering che era una colpa (almeno non specificamente). Era qualcosa di diverso dalla logica di livello che stava causando un collo di bottiglia.

Il punto è ... Traceview è il tuo migliore amico.

Il metodo di profilazione ha mostrato dove la CPU stava spendendo il suo tempo e perché il glitch nella framerate stava accadendo.(incidentalmente, il costo di rendering era anche più alto nel Livello 2 ma non era il collo di bottiglia)

Problemi correlati