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.
fuente
Respuestas:
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.
fuente
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.
fuente
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 .
fuente
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.
fuente
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
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 ...
fuente
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!
fuente