Baixo desempenho no android ao executar o APK, funciona bem no navegador

12

Eu criei um pequeno projeto de jogo em HTML5 usando o mecanismo Phaser (tentei 1.1.5 e 1.1.6). Em seguida, para portá-lo para a plataforma móvel, usei o Phonegap / Cordova para Windows Phone 8, Android e iOS.

No meu jogo, existem cerca de 10 elementos que são animados (movendo-se do ponto a ao ponto be rotação ao mesmo tempo). No iOS e no Windows Phone 8, não enfrentei nenhum problema.

Mas com o Android, o desempenho é inaceitável. Por outro lado, se eu rodar meu jogo pelo navegador do dispositivo, ele será executado sem problemas. Mas o APK compilado é muito instável e os elementos se movem muito lentamente e de maneira instável.

Eu verifiquei que o sinalizador de aceleração de hardware do Android está definido como "true" no arquivo de manifesto. Tentei alterá-lo também, mas isso não refletiu nenhuma alteração no desempenho.

Eu verifiquei o mesmo no Android 4.2 no dispositivo Samsung S2 e esse desempenho é melhor. Mas no Asus Nexus Tab 7 (executando o Android 4.4) é muito instável, enquanto o sistema operacional e o dispositivo são os mais recentes. Também verificado em outro dispositivo com Android 4.3 (Samsung Galaxy Grand Duos) e nesse desempenho também não é bom.

No meu jogo, tentei a renderização do WebGL / Canvas (o mecanismo da Phaser usa o Pixi.js, que fica em 2d canvas se o WebGL não for suportado), mas nenhuma alteração. Da mesma forma com easeljs.

Se alguém enfrentou um problema semelhante e pode sugerir alguma maneira de obter desempenho nativo, como. Eu verifiquei exemplos cocoonjs e, embora pareçam suaves e aceitáveis, não posso seguir esse caminho.

devilzk83
fonte
3
Esta questão está muito bem escrita. Gostaria de saber se você executou um benchmark ou perfilador para restringir o que pode ser o culpado e se entrou em contato com o phonegap com um conjunto de etapas fáceis para reproduzir isso?
AturSams
Ainda não escrevi para telefonar. Tentei o profiler e não conseguiu encontrar nada incomum com a estrutura ou a base de código. Talvez seja por isso que tudo corra bem no desktop e também no navegador móvel. Uma descoberta foi que o Android tem um tempo de execução diferente para aplicativos baseados no WebView e no próprio navegador. Mas não foi possível encontrar nada que indique por que essa interpolação tão pequena está causando tanto atraso no modo APK (WebView). De fato, esse problema está aparecendo na guia Nexus executando o KitKat, que é considerado o mais rápido da web (baseado no Chrome).
Devilzk83
Esta é uma observação muito superficial da minha parte; parece que você pode estar com um bug. Não vejo por que haveria uma forte discrepância no desempenho entre dispositivos de ponta.
AturSams
1
Estou curioso para saber por que você não deseja seguir a rota CocoonJS. Acredito que tanto a Phaser quanto a Pixi funcionam bem no CocoonJS. O que está impedindo você de tentar essa opção?
Geoff
2
O bug que causa a renderização CSS3 e Canvas é o novo visual da web baseado no Chromium e é um fiasco total para os desenvolvedores Cordova / Phonegap no Android ... Ghaaadzoooks ninguém no Google testou o desempenho do webview canvas / CSS3 antes de inicializar o KitKat ? Espero que seja corrigido de forma rápida e esperançosamente transparente, especialmente para pessoas que usam celulares com Android bloqueado por terceiros ... Fiasco total .. Se você é um desenvolvedor Cordova / Phonegap ou está utilizando o Webview, marque este bug com os relatórios de erros do Google Android. mais informações: groups.google.com/forum/#!topic/phonegap/1ZxXe6chHZc code.googl

Respostas:

2

O WebView baseado em Chromium que causou esse problema acabou sendo atualizado no KitKat versão 4.4.3 / 4.4.4 em meados de 2014, mas esse é um conforto frio, considerando que alguns fornecedores tomaram decisões aparentemente arbitrárias sobre quais de seus telefones receberam a atualização e quais foram. não. O Samsung Galaxy S4, por exemplo, ainda está preso na 4.4.2.

Siga o conselho de outras respostas: se você tiver um jogo baseado em tela, evite o PhoneGap, a menos que você possa determinar que é aceitável excluir telefones que estejam executando as versões do KitKat abaixo da versão 4.4.3.

Weston Wedding
fonte
1

Tente refazer seu jogo na libgdx. O Libgdx é rápido o suficiente e não possui problemas como esse e funciona em todas as plataformas. Infelizmente, isso é apenas o que consigo pensar no momento e não gosto da idéia de converter js para android java ou o que quer que esse coverter faça. Embora isso leve algum tempo, teste o LibGDX.

captainbuzz123
fonte
1

Parece que esse é um problema com a maioria dos desenvolvedores de jogos. Problema semelhante

"Ouvi muitas vezes que o grampo telefônico não era a melhor escolha para se fazer um jogo de tela. É mais adaptado ao aplicativo da web para o nativo".

Parece estar processando recursos de problemas para telefones Android. Existem alguns mecanismos que não conseguem lidar com mais renderizações de sprites. Eu sei que 10 objetos são fáceis de renderizar, mas definitivamente parece um problema com os recursos de renderização.

Minha sugestão é que você vá com cocoonjs .

Sushobhit333
fonte
1

Corri para o mesmo problema com a Phaser (com este jogo simples ). Infelizmente, com o HTML5 e a renderização da web / canvas, você fica à mercê do seu telefone - haverá usuários com navegadores quebrados ou com baixo desempenho (como o meu).

Como o @ captainbuzz123 sugeriu, a única solução real é mudar para uma plataforma não HTML5. Minha ferramenta preferida por enquanto é o OpenFL .

Enquanto meu aplicativo Phaser (muito simples) é executado em torno de 8-12FPS no meu telefone, com o OpenFL (porque é transpilado para C ++ e executado através do Android NDK), acabo obtendo um desempenho muito suave e fluido no meu telefone.

Definitivamente vale a pena tentar.

ashes999
fonte
1

Uma atualização para a primeira semana de 2020:

Cocoonjs provavelmente foi uma solução sólida para esse problema no passado, mas eles estão sendo encerrados .. uma citação de seu site oficial que diz tudo

É com profundo pesar que anunciamos que deixaremos de prestar nosso amado serviço, Cocoon.

Iniciamos o Ludei / Cocoon porque acreditávamos que o futuro do desenvolvimento de aplicativos e jogos seria baseado em HTML5. Infelizmente, isso não aconteceu e o desenvolvimento nativo está mais forte do que nunca.

Na verdade, isso reflete o desenvolvimento do HTML5 para dispositivos móveis em 2019. não que isso não seja possível, mas não seja eficaz como esperado ...

Estou mudando para o desenvolvimento nativo após alguns jogos de produção criados com Phaser e Cordova para IOS e Android. Farto de atingir o teto de desempenho, mesmo na mecânica mais simples em dispositivos de médio porte

Apenas para compartilhar minhas próximas opções de soluções de tecnologia / pilha para escolher para quem vê isso no presente ou no futuro próximo:

  • SpriteKit para IOS e LibGDX para Android: Essa provavelmente será a solução com melhor desempenho, embora exija desenvolvimento para cada plataforma separadamente. Mas também será o "nível mais baixo"

  • O Cocos2D-X não tem muita certeza de quão bem ele é suportado e ainda é uma opção válida, mas deve ser muito maduro e com bom desempenho + você pode escrever em C ++ e criar para qualquer plataforma

  • Corona parece ser uma plataforma interessante (e gratuita) de plataforma cruzada e de desempenho, usando Lua será necessário testá-lo versus as outras soluções mencionadas aqui

  • Use um dos motores modernos, como Unity ou Godot . Não tenho certeza de como isso está se comparando às estruturas mencionadas em termos de desempenho

Espero que isso ajude alguém ..

Blue Bot
fonte
0

Vi isso no outro dia, pode valer a pena dar uma olhada para resolver esse problema. Parece uma boa idéia para mim: http://tmtg.net/glesjs/

O fato de funcionar bem no navegador, mas não no Phonegap / Cordova, é realmente muito estranho. Toda a situação do canvas / webGL no Android (não posso falar pelo iOS) sempre me pareceu bastante terrível. Definitivamente algo que o GOogle precisa colocar mais energia, talvez o Lollipop seja uma melhoria!

Milo Mordaunt
fonte