Я создал небольшой игровой проект в 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, и хотя они кажутся гладкими и приемлемыми, я не могу пойти по этому пути.
источник
Ответы:
Основанное на Chromium WebView, вызвавшее эту проблему, было в конечном итоге обновлено в KitKat версии 4.4.3 / 4.4.4 в середине 2014 года, но это холодное утешение, учитывая, что некоторые производители приняли некоторые, казалось бы, произвольные решения о том, какие из их телефонов получили обновление, а какие - не. Например, Samsung Galaxy S4 все еще находится в ловушке 4.4.2.
Следуйте советам, данным в других ответах: если у вас есть игра на основе холста, избегайте PhoneGap, если только вы не можете определить, что зацикливание на телефонах с версиями KitKat ниже 4.4.3 допустимо.
источник
Попробуйте переделать свою игру в libgdx. Libgdx достаточно быстр и не имеет подобных проблем, и он работает на всех платформах. К сожалению, это только то, о чем я могу думать прямо сейчас, и мне не нравится идея преобразования js в android java или что-то еще, что делает этот кавер. Хотя это займет некоторое время, дайте LibGDX тест.
источник
Похоже, это проблема большинства разработчиков игр. Аналогичная проблема
«Я часто слышал, что телефонный разрыв был не лучшим выбором, когда я хотел сделать холст. Он более приспособлен к веб-приложению».
Похоже, проблема рендеринга для телефонов Android. Есть некоторые движки, которые не могут обрабатывать больше спрайтов. Я знаю, что 10 объектов легко рендерить, но это определенно выглядит проблемой с возможностями рендеринга.
Я предлагаю вам пойти с cocoonjs .
источник
Я столкнулся с той же проблемой с Phaser (с этой простой игрой ). К сожалению, с рендерингом HTML5 и web / canvas вы зависите от своего телефона - будут пользователи с сломанными или плохо работающими браузерами (такими как мой).
Как и предложил @ captainbuzz123, единственное реальное решение - перейти на платформу, отличную от HTML5. Мой инструмент выбора сейчас OpenFL .
В то время как мое (очень простое) приложение Phaser работает на моем телефоне со скоростью около 8-12FPS, с OpenFL (потому что оно переносится на C ++ и работает через Android NDK), я в итоге получаю очень плавную и плавную производительность на своем телефоне.
Это определенно стоит попробовать.
источник
Обновление за первую неделю 2020-х годов:
Cocoonjs, вероятно, был солидным решением этой проблемы в прошлом, но они закрываются .. цитата с их официального сайта, которая говорит обо всем
Это на самом деле отражает разработку HTML5 для мобильных устройств в 2019 году. Не то чтобы это невозможно, но неэффективно, как ожидалось ...
Я перехожу к нативной разработке после некоторых серийных игр, созданных с помощью Phaser и Cordova для IOS и Android. Надоело достигать предела производительности даже на самой простой механике на устройствах среднего класса
Просто чтобы поделиться моими следующими вариантами технологий / стекового решения на выбор для тех, кто видит это в настоящем или в ближайшем будущем:
SpriteKit для IOS и LibGDX для Android: это, вероятно, будет наиболее эффективным решением, хотя оно потребует разработки для каждой платформы в отдельности ... но также будет наиболее «низкого уровня»
Cocos2D-X не совсем уверен, насколько хорошо он поддерживается, и все еще является правильным выбором, но он должен быть очень зрелым и производительным +, вы можете писать на C ++ и строить для любой платформы
Corona выглядит как интересный (и бесплатный) кроссплатформенный и производительный фреймворк, при использовании Lua его нужно будет протестировать против других решений, упомянутых здесь
Используйте один из современных двигателей, таких как Unity или Godot . Не уверен, как это по сравнению с упомянутыми выше рамками производительности
Надеюсь, это поможет кому-нибудь ..
источник
Видел это на днях, вполне может стоить посмотреть, чтобы решить эту проблему. Звучит как хорошая идея для меня: http://tmtg.net/glesjs/
То, что он работает нормально в браузере, а не в Phonegap / Cordova, действительно очень странно. Вся ситуация Canvas / WebGL на Android (не могу говорить для iOS) всегда казалась мне довольно ужасной. Определенно что-то, в чем нуждается GOogle, чтобы добавить больше энергии, возможно, Lollipop станет улучшением!
источник