Низкая производительность в Android при запуске APK, отлично работает в браузере


12

Я создал небольшой игровой проект в HTML5 с использованием движка Phaser (пробовал как 1.1.5, так и 1.1.6). Затем, чтобы портировать его на мобильную платформу, использовали Phonegap / Cordova для Windows Phone 8, Android и iOS.

В моей игре есть около 10 элементов, которые анимируются (перемещение из точки a в точку b и некоторое вращение одновременно). На iOS и Windows Phone 8 я не столкнулся с какой-либо проблемой.

Но с Android производительность неприемлема. С другой стороны, если я запускаю игру через браузер устройства, она работает без задержек. Но скомпилированный APK работает очень резко и элементы движутся очень медленно и мерцающим образом.

Я проверил, что флаг аппаратного ускорения Android установлен в значение "true" в файле манифеста. Попытка изменить это ложное тоже, но это не отражало каких-либо изменений в производительности.

Я проверил то же самое на Android 4.2 на устройстве Samsung S2 и на этой производительности лучше. Но на Asus Nexus Tab 7 (под управлением Android 4.4) она очень дрянная, а ОС и устройство обе последние. Также проверено на другом устройстве под управлением Android 4.3 (Samsung Galaxy Grand Duos) и на этом тоже производительность не очень хорошая.

В моей игре пробовал оба рендеринга WebGL / Canvas (движок Phaser использует Pixi.js, который возвращается к 2d canvas, если WebGL не поддерживается), но без изменений. Аналогично с мольбертом.

Если кто-то еще сталкивался с подобной проблемой и может предложить любой способ получить нативную производительность. Я проверил примеры cocoonjs, и хотя они кажутся гладкими и приемлемыми, я не могу пойти по этому пути.


3
Этот вопрос очень хорошо написан. Я хотел бы знать, запускали ли вы эталонный тест или профилировщик, чтобы сузить круг возможных виновников, и если вы связались с телефонной пробой с помощью набора простых шагов, чтобы воспроизвести это?
AturSams

Я еще не написал в phonegap. Попробовал профилировщик и не смог найти ничего необычного с фреймворком или кодовой базой. Возможно, это причина того, что все работает гладко и на настольном компьютере, и в мобильном браузере. Одним из выводов было то, что у Android есть другая среда выполнения для приложений на основе WebView и самого браузера. Но не смог найти ничего, что указывало бы на то, почему такая небольшая анимация вызывает такое большое отставание в режиме APK (WebView). Фактически, эта проблема появляется на вкладке Nexus с запущенным KitKat, который, как говорят, имеет самый быстрый веб-обзор (на основе Chrome).
devilzk83

Это очень поверхностное наблюдение с моей стороны; кажется, что вы можете быть на ошибку. Я не понимаю, почему между высокопроизводительными устройствами существует сильное расхождение в производительности.
AturSams

1
Мне любопытно, почему вы не хотите идти по маршруту CocoonJS. Я считаю, что и Phaser, и Pixi хорошо работают в CocoonJS. Что мешает вам попробовать этот вариант?
Джефф

2
Ошибка, приводящая к неудачному рендерингу CSS3 и Canvas, - это новое веб-представление на основе Chromium, и это полное фиаско для разработчиков Cordova / Phonegap на Android ... Ghaaadzoooks никто не проверял на Google производительности webview canvas / CSS3 перед загрузкой KitKat за дверь ? Я надеюсь, что это исправлено быстро и, надеюсь, прозрачно, особенно для пользователей мобильных телефонов с заблокированными сборками Android сторонних производителей ... Совершенное фиаско .. Если вы являетесь разработчиком Cordova / Phonegap или используете Webview, отметьте эту ошибку в отчетах об ошибках Google Android .. Дополнительная информация: groups.google.com/forum/#!topic/phonegap/1ZxXe6chHZc code.googl

Ответы:


2

Основанное на Chromium WebView, вызвавшее эту проблему, было в конечном итоге обновлено в KitKat версии 4.4.3 / 4.4.4 в середине 2014 года, но это холодное утешение, учитывая, что некоторые производители приняли некоторые, казалось бы, произвольные решения о том, какие из их телефонов получили обновление, а какие - не. Например, Samsung Galaxy S4 все еще находится в ловушке 4.4.2.

Следуйте советам, данным в других ответах: если у вас есть игра на основе холста, избегайте PhoneGap, если только вы не можете определить, что зацикливание на телефонах с версиями KitKat ниже 4.4.3 допустимо.


1

Попробуйте переделать свою игру в libgdx. Libgdx достаточно быстр и не имеет подобных проблем, и он работает на всех платформах. К сожалению, это только то, о чем я могу думать прямо сейчас, и мне не нравится идея преобразования js в android java или что-то еще, что делает этот кавер. Хотя это займет некоторое время, дайте LibGDX тест.


1

Похоже, это проблема большинства разработчиков игр. Аналогичная проблема

«Я часто слышал, что телефонный разрыв был не лучшим выбором, когда я хотел сделать холст. Он более приспособлен к веб-приложению».

Похоже, проблема рендеринга для телефонов Android. Есть некоторые движки, которые не могут обрабатывать больше спрайтов. Я знаю, что 10 объектов легко рендерить, но это определенно выглядит проблемой с возможностями рендеринга.

Я предлагаю вам пойти с cocoonjs .


1

Я столкнулся с той же проблемой с Phaser (с этой простой игрой ). К сожалению, с рендерингом HTML5 и web / canvas вы зависите от своего телефона - будут пользователи с сломанными или плохо работающими браузерами (такими как мой).

Как и предложил @ captainbuzz123, единственное реальное решение - перейти на платформу, отличную от HTML5. Мой инструмент выбора сейчас OpenFL .

В то время как мое (очень простое) приложение Phaser работает на моем телефоне со скоростью около 8-12FPS, с OpenFL (потому что оно переносится на C ++ и работает через Android NDK), я в итоге получаю очень плавную и плавную производительность на своем телефоне.

Это определенно стоит попробовать.


1

Обновление за первую неделю 2020-х годов:

Cocoonjs, вероятно, был солидным решением этой проблемы в прошлом, но они закрываются .. цитата с их официального сайта, которая говорит обо всем

С глубоким сожалением мы объявляем, что прекратим предоставлять наш любимый сервис Cocoon.

Мы начали Ludei / Cocoon, потому что полагали, что будущее разработки приложений и игр будет основано на HTML5. К сожалению, этого не произошло, и местное развитие сильнее, чем когда-либо.

Это на самом деле отражает разработку HTML5 для мобильных устройств в 2019 году. Не то чтобы это невозможно, но неэффективно, как ожидалось ...

Я перехожу к нативной разработке после некоторых серийных игр, созданных с помощью Phaser и Cordova для IOS и Android. Надоело достигать предела производительности даже на самой простой механике на устройствах среднего класса

Просто чтобы поделиться моими следующими вариантами технологий / стекового решения на выбор для тех, кто видит это в настоящем или в ближайшем будущем:

  • SpriteKit для IOS и LibGDX для Android: это, вероятно, будет наиболее эффективным решением, хотя оно потребует разработки для каждой платформы в отдельности ... но также будет наиболее «низкого уровня»

  • Cocos2D-X не совсем уверен, насколько хорошо он поддерживается, и все еще является правильным выбором, но он должен быть очень зрелым и производительным +, вы можете писать на C ++ и строить для любой платформы

  • Corona выглядит как интересный (и бесплатный) кроссплатформенный и производительный фреймворк, при использовании Lua его нужно будет протестировать против других решений, упомянутых здесь

  • Используйте один из современных двигателей, таких как Unity или Godot . Не уверен, как это по сравнению с упомянутыми выше рамками производительности

Надеюсь, это поможет кому-нибудь ..


0

Видел это на днях, вполне может стоить посмотреть, чтобы решить эту проблему. Звучит как хорошая идея для меня: http://tmtg.net/glesjs/

То, что он работает нормально в браузере, а не в Phonegap / Cordova, действительно очень странно. Вся ситуация Canvas / WebGL на Android (не могу говорить для iOS) всегда казалась мне довольно ужасной. Определенно что-то, в чем нуждается GOogle, чтобы добавить больше энергии, возможно, Lollipop станет улучшением!

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.