Scarse prestazioni in Android quando si esegue APK, funziona bene nel browser


12

Ho creato un piccolo progetto di gioco in HTML5 utilizzando il motore Phaser (provato sia 1.1.5 che 1.1.6). Quindi per portarlo su piattaforma mobile, ha usato Phonegap / Cordova per Windows Phone 8, Android e iOS.

Nel mio gioco, ci sono circa 10 elementi che si animano (spostandosi dal punto a al punto b e un po 'di rotazione contemporaneamente). Su iOS e Windows Phone 8, non ho riscontrato alcun problema.

Ma con Android, le prestazioni sono inaccettabili. D'altra parte, se eseguo il gioco tramite il browser del dispositivo, funziona senza problemi. Ma l'APK compilato funziona molto a scatti e gli elementi si muovono molto lentamente e in modo tremolante.

Ho verificato che il flag di accelerazione hardware Android sia impostato su "true" nel file manifest. Ho provato a cambiarlo anche in modo falso, ma ciò non ha riflesso alcun cambiamento nelle prestazioni.

Ho controllato lo stesso su Android 4.2 sul dispositivo Samsung S2 e su quella prestazione è migliore. Ma su Asus Nexus Tab 7 (con Android 4.4) è molto a scatti, mentre il sistema operativo e il dispositivo sono entrambi più recenti. Ho anche controllato su un altro dispositivo con Android 4.3 (Samsung Galaxy Grand Duos) e anche su questo le prestazioni non sono affatto buone.

Nel mio gioco ho provato sia il rendering WebGL / Canvas (il motore Phaser utilizza Pixi.js, che esegue il fallback alla tela 2D se WebGL non è supportato), ma nessuna modifica. Allo stesso modo con easeljs.

Se qualcun altro ha affrontato problemi simili e può suggerire un modo per ottenere prestazioni simili a quelle native. Ho controllato gli esempi di cocoonjs e anche se sembrano fluidi e accettabili, non posso seguire questa strada.


3
Questa domanda è molto ben scritta. Vorrei sapere se hai eseguito un benchmark o un profiler per restringere il campo su quale potrebbe essere il colpevole e se hai contattato phonegap con una serie di semplici passaggi per riprodurlo?
AturSams

Non ho ancora scritto su phonegap. Ho provato il profiler e non ho trovato nulla di insolito con il framework o la base di codice. Forse questo è il motivo per cui tutto funziona senza problemi anche su desktop e browser mobile. Una scoperta è stata che Android ha un runtime diverso per le app basate su WebView e il browser stesso. Ma non è stato possibile trovare nulla che indichi il motivo per cui l'interpolazione così piccola sta causando così tanto ritardo nella modalità APK (WebView). In realtà, questo problema si presenta sulla scheda Nexus con KitKat che si dice abbia la visualizzazione web più veloce (basata su Chrome).
devilzk83,

Questa è un'osservazione molto superficiale da parte mia; sembra che potresti essere coinvolto in un bug. Non vedo perché ci sarebbe una forte discrepanza nelle prestazioni tra dispositivi di fascia alta.
AturSams,

1
Sono curioso di sapere perché non vuoi seguire il percorso CocoonJS. Credo che sia Phaser che Pixi funzionino bene in CocoonJS. Cosa ti impedisce di provare questa opzione?
Geoff

2
Il bug che causa lo zoppo CSS3 e il rendering su tela è la nuova visualizzazione Web basata su Chromium ed è un fiasco totale per gli sviluppatori Cordova / Phonegap su Android ... Ghaaadzoooks non ha fatto nessuno testare le prestazioni su tela / CSS3 di Google Viewview prima di avviare KitKat ? Spero che sia risolto velocemente e, si spera, in modo trasparente, in particolare per le persone sui telefoni cellulari con build Android bloccate di terze parti ... Fiasco completo .. Se sei un sviluppatore di Cordova / Phonegap o stai utilizzando Webview, ti preghiamo di contrassegnare questo bug con segnalazioni di bug di Google Android. maggiori informazioni: groups.google.com/forum/#!topic/phonegap/1ZxXe6chHZc code.googl

Risposte:


2

Il WebView basato su Chromium che ha causato questo problema è stato infine aggiornato in KitKat versione 4.4.3 / 4.4.4 a metà 2014, ma questo è un po 'di conforto considerando che alcuni fornitori hanno preso alcune decisioni apparentemente arbitrarie su quale dei loro telefoni ha ricevuto l'aggiornamento e quale non. Samsung Galaxy S4, ad esempio, è ancora intrappolato in 4.4.2.

Segui i consigli forniti da altre risposte: se hai un gioco basato su tela, evita PhoneGap a meno che tu non riesca a stabilire che essere bloccato con l'esclusione dei telefoni che eseguono versioni di KitKat inferiori alla 4.4.3 è accettabile.


1

Prova a rifare il gioco in libgdx. Libgdx è abbastanza veloce e non ha problemi del genere e funziona su tutte le piattaforme. Sfortunatamente questo è solo ciò a cui riesco a pensare in questo momento e non mi piace l'idea di convertire js in Android Java o qualunque cosa faccia quel coverter. Anche se ci vorrà del tempo, fai un test su LibGDX.


1

Sembra che questo sia un problema con la maggior parte degli sviluppatori di giochi. Problema simile

"Ho sentito spesso che phonegap non era la scelta migliore quando si voleva creare un gioco su tela. È più adattato all'app Web per i nativi."

Sembra che stia visualizzando funzionalità di problema per i telefoni Android. Esistono alcuni motori che non sono in grado di gestire il rendering di più sprite. So che 10 oggetti sono facili da renderizzare ma sembra sicuramente un problema con le capacità di rendering.

Il mio suggerimento è di andare con cocoonjs .


1

Ho riscontrato lo stesso problema con Phaser (con questo semplice gioco ). Sfortunatamente, con HTML5 e il rendering web / canvas, sei in balia del tuo telefono: ci saranno utenti con browser non funzionanti o con prestazioni scadenti (come il mio).

Come suggerito da @ captainbuzz123, l'unica vera soluzione è passare a una piattaforma non HTML5. Il mio strumento preferito per ora è OpenFL .

Mentre la mia (molto semplice) app Phaser funziona a circa 8-12FPS sul mio telefono, con OpenFL (perché è traspilato in C ++ e passa attraverso Android NDK), alla fine ottengo prestazioni molto fluide e fluide sul mio telefono.

Vale sicuramente la pena provare.


1

Un aggiornamento per la prima settimana del 2020:

Cocoonjs era probabilmente una soluzione solida per questo problema in passato, ma stanno chiudendo .. una citazione dal loro sito ufficiale che dice tutto

È con profondo rammarico che annunciamo che smetteremo di fornire il nostro amato servizio, Cocoon.

Abbiamo avviato Ludei / Cocoon perché credevamo che il futuro dello sviluppo di app e giochi sarebbe basato su HTML5. Sfortunatamente, non è successo e lo sviluppo nativo è più forte che mai.

Questo in realtà riflette lo sviluppo di HTML5 per dispositivi mobili nel 2019 .. non è impossibile, ma non efficace come previsto ...

Sto passando allo sviluppo nativo dopo alcuni giochi di produzione realizzati con Phaser e Cordova per IOS e Android. Stufo di raggiungere il massimo delle prestazioni anche sui meccanici più semplici sui dispositivi di fascia media

Solo per condividere le mie prossime soluzioni di tecnologia / stack tra cui scegliere per chiunque lo veda nel presente o nel prossimo futuro:

  • SpriteKit per IOS e LibGDX per Android: questa sarà probabilmente la soluzione più performante anche se richiederà lo sviluppo per ciascuna piattaforma separatamente .. ma sarà anche il più "basso livello"

  • Cocos2D-X non è davvero sicuro di quanto sia ben supportato ed è ancora una scelta valida ma dovrebbe essere molto maturo e performante + puoi scrivere in C ++ e compilare per qualsiasi piattaforma ci sia

  • Corona sembra un'interessante (e gratuita) piattaforma multipiattaforma e performante, usando Lua dovrai testarlo rispetto alle altre soluzioni menzionate qui

  • Usa uno dei motori moderni come Unity o Godot . Non sono sicuro di come questo sia paragonabile alle prestazioni dei framework citati

Spero che questo aiuti chiunque ..


0

L'ho visto l'altro giorno, potrebbe valere la pena dare un'occhiata per risolvere questo problema. Mi sembra un'idea abbastanza carina: http://tmtg.net/glesjs/

Il fatto che funzioni bene nel browser, ma non quando è su Phonegap / Cordova, è davvero strano. L'intera situazione tela / webGL su Android (non posso parlare per iOS) mi è sempre sembrata piuttosto terribile. Sicuramente qualcosa su cui GOogle ha bisogno di aggiungere più energia, forse Lollipop sarà un miglioramento!

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.