Bajo rendimiento en Android cuando se ejecuta APK, funciona bien en el navegador

12

He creado un pequeño proyecto de juego en HTML5 usando el motor Phaser (probé tanto 1.1.5 como 1.1.6). Luego, para portarlo a la plataforma móvil, usé Phonegap / Cordova para Windows Phone 8, Android e iOS.

En mi juego, hay alrededor de 10 elementos, que se animan (moviéndose del punto a al punto b y algo de rotación al mismo tiempo). En iOS y Windows Phone 8, no tuve ningún problema.

Pero con Android, el rendimiento es inaceptable. Por otro lado, si ejecuto mi juego a través del navegador del dispositivo, se ejecuta sin problemas y sin retraso. Pero el APK compilado se ejecuta muy bruscamente y los elementos se mueven muy lentamente y parpadeando.

He comprobado que el indicador de aceleración de hardware de Android está configurado como "verdadero" en el archivo de manifiesto. Intenté cambiarlo a falso también, pero eso no reflejó ningún cambio en el rendimiento.

He comprobado lo mismo en Android 4.2 en el dispositivo Samsung S2 y en ese rendimiento es mejor. Pero en Asus Nexus Tab 7 (con Android 4.4) es muy desigual, mientras que el sistema operativo y el dispositivo son los últimos. También se verificó en otro dispositivo con Android 4.3 (Samsung Galaxy Grand Duos) y en eso también el rendimiento no es bueno en absoluto.

En mi juego probé tanto el renderizado WebGL / Canvas (el motor Phaser usa Pixi.js, que recurre al lienzo 2d si WebGL no es compatible), pero no hay cambio. Del mismo modo con easeljs.

Si alguien más se enfrentó a un problema similar y puede sugerir cualquier forma de obtener un rendimiento nativo. Revisé los ejemplos de cocoonjs y, aunque parecen suaves y aceptables, no puedo seguir esa ruta.

devilzk83
fuente
3
Esta pregunta está muy bien escrita. Me gustaría saber si ejecutó un punto de referencia o un generador de perfiles para reducir lo que podría ser el culpable y si contactó a phonegap con un conjunto de pasos fáciles para reproducir esto.
AturSams
Todavía no he escrito a phonegap. Probé el generador de perfiles y no pude encontrar nada inusual con el marco o la base de código. Quizás esa sea la razón por la cual todo funciona sin problemas en el escritorio y en el navegador móvil también. Un hallazgo fue que Android tiene un tiempo de ejecución diferente para las aplicaciones basadas en WebView y el navegador en sí. Pero no se pudo encontrar nada que indique por qué una interpolación tan pequeña está causando tanto retraso en el modo APK (WebView). De hecho, este problema aparece en la pestaña Nexus que ejecuta KitKat, que se dice que tiene la vista web más rápida (basada en Chrome).
devilzk83
Esta es una observación muy superficial de mi parte; parece que podrías estar en un error. No veo por qué habría una fuerte discrepancia en el rendimiento entre dispositivos de alta gama.
AturSams
1
Tengo curiosidad por qué no quieres ir a la ruta CocoonJS. Creo que tanto Phaser como Pixi funcionan bien dentro de CocoonJS. ¿Qué te impide probar esa opción?
Geoff
2
El error que causa la escasa representación de CSS3 y Canvas es la nueva vista web basada en Chromium y es un fiasco total para los desarrolladores de Cordova / Phonegap en Android ... Ghaaadzoooks no hizo ninguna prueba en Google webview canvas / CSS3 antes de arrancar KitKat por la puerta ? Espero que se solucione de manera rápida y transparente, especialmente para las personas que usan teléfonos celulares con compilaciones de Android bloqueadas por terceros ... Un completo fracaso ... Si usted es un desarrollador de Cordova / Phonegap o utiliza Webview, marque este error con los informes de errores de Google Android ... . más información: groups.google.com/forum/#!topic/phonegap/1ZxXe6chHZc code.googl

Respuestas:

2

El WebView basado en Chromium que causó este problema finalmente se actualizó en la versión 4.4.3 / 4.4.4 de KitKat a mediados de 2014, pero eso es una comodidad fría teniendo en cuenta que algunos proveedores han tomado algunas decisiones aparentemente arbitrarias sobre cuáles de sus teléfonos recibieron la actualización y cuáles lo hicieron. no. Samsung Galaxy S4, por ejemplo, todavía está atrapado en 4.4.2.

Siga los consejos dados por otras respuestas: si tiene un juego basado en el lienzo, evite PhoneGap a menos que pueda determinar que no se aceptan los teléfonos que ejecutan versiones de KitKat inferiores a 4.4.3.

Boda Weston
fuente
1

Intenta rehacer tu juego en libgdx. Libgdx es lo suficientemente rápido y no tiene problemas como ese y funciona en todas las plataformas. Desafortunadamente, esto es solo lo que puedo pensar en este momento y no me gusta la idea de convertir js a android java o lo que sea que haga ese convertidor. Aunque llevará algo de tiempo, pruebe LibGDX.

captainbuzz123
fuente
1

Parece que este es un problema con la mayoría de los desarrolladores de juegos. Problema similar

"A menudo escuché que el teléfono no era la mejor opción cuando quería hacer un juego de lienzo. Se adapta más a la aplicación web que a la nativa".

Parece estar generando capacidades de problemas para teléfonos Android. Hay algunos motores que no pueden manejar más renderizado de sprites. Sé que 10 objetos son fáciles de renderizar, pero definitivamente parece un problema con las capacidades de representación.

Mi sugerencia es que vayas con cocoonjs .

Sushobhit333
fuente
1

Me encontré con el mismo problema con Phaser (con este juego simple ). Desafortunadamente, con HTML5 y la representación web / lienzo, está a merced de su teléfono: habrá usuarios con navegadores rotos o de bajo rendimiento (como el mío).

Como sugirió @ captainbuzz123, la única solución real es pasar a una plataforma que no sea HTML5. Mi herramienta de elección por ahora es OpenFL .

Si bien mi aplicación Phaser (muy simple) se ejecuta a alrededor de 8-12FPS en mi teléfono, con OpenFL (porque se transplicó a C ++ y se ejecuta a través del NDK de Android), termino obteniendo un rendimiento muy fluido y fluido en mi teléfono.

Definitivamente vale la pena intentarlo.

cenizas999
fuente
1

Una actualización para la primera semana de 2020:

Cocoonjs fue probablemente una solución sólida para este problema en el pasado, pero están cerrando ... una cita de su sitio web oficial que lo dice todo

Con profundo pesar anunciamos que dejaremos de brindar nuestro amado servicio, Cocoon.

Comenzamos Ludei / Cocoon porque creíamos que el futuro del desarrollo de aplicaciones y juegos se basaría en HTML5. Desafortunadamente, no sucedió y el desarrollo nativo es más fuerte que nunca.

En realidad, esto refleja el desarrollo HTML5 para dispositivos móviles en 2019 ... no es que no sea posible, pero no es efectivo como se esperaba ...

Estoy cambiando al desarrollo nativo después de algunos juegos de producción creados con Phaser y Cordova para iOS y Android. Harto de alcanzar el límite de rendimiento incluso en la mecánica más simple en dispositivos de gama media

Solo para compartir mis siguientes opciones de soluciones tecnológicas / de pila para elegir para cualquiera que vea esto en el presente o en el futuro cercano:

  • SpriteKit para IOS y LibGDX para Android: Esta será probablemente la solución más eficiente aunque requerirá el desarrollo de cada plataforma por separado ... pero también será la más "de bajo nivel"

  • Cocos2D-X no está realmente seguro de qué tan bien es compatible y sigue siendo una opción válida, pero debe ser muy maduro y eficiente + puede escribir en C ++ y construir para cualquier plataforma que haya

  • Corona parece una plataforma multiplataforma interesante (y gratuita) y un marco de rendimiento, el uso de Lua deberá probarlo frente a las otras soluciones mencionadas aquí

  • Use uno de los motores modernos como Unity o Godot . No estoy seguro de cómo se compara esto con el rendimiento de los marcos mencionados.

Espero que esto ayude a cualquiera ...

Bot azul
fuente
0

Vi esto el otro día, podría valer la pena echarle un vistazo para resolver este problema. Suena como una buena idea para mí: http://tmtg.net/glesjs/

El hecho de que funcione bien cuando está en el navegador, pero no cuando está en Phonegap / Cordova es realmente extraño. Toda la situación de canvas / webGL en Android (no puedo hablar por iOS) siempre me ha parecido bastante grave. Definitivamente algo en lo que GOogle necesita poner más energía, ¡tal vez Lollipop será una mejora!

Milo Mordaunt
fuente