Мобильный Android Chrome плохо работает с HTML5 и CREATEJS - проблемы с зависанием - PullRequest
0 голосов
/ 08 октября 2019

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

1) В Android Google Chrome возникает проблема, возникающая, когда я просто нажимаю в любом месте экрана: FPS падает, и любая воспроизводимая анимация останавливается на время моего касания. Проблема только в браузере Mobile Chrome, на Android. Его нет ни в других мобильных браузерах, ни в iPhone, ни в Safari, Firefox и т. Д. Я создал простой apk, используя webview, и у него тоже нет проблем. Так что по какой-то причине проблема только в мобильном Android Chrome.

Код оптимизирован максимально. 2 месяца назад мы использовали только 1 холст, но теперь мы используем несколько холстов, и у нас меньше анимаций на каждом холсте, запущенном каждый раз. В то время как в Android Firefox он работает отлично, но в Android Chrome он зависает за один клик.

Я пытался отключить события stagemousedown / up, потому что они запускаются, когда я просто нажимаю в любом месте на сцене. Это не решило проблему, или возможно, что есть некоторые скрытые события stagetouch, которые я не знаю, как отключить.

2) В Android Google Chrome и iPhone6 ​​Safari, когда я нажимаю кнопку SPINигра запускает SPIN, но с задержкой не менее 1,5 секунд, но внутри кода такая задержка не добавляется намеренно. На ПК любой браузер, Android / iOS Mobile Firefox, это отлично работает, без задержек. В iOS Safari iPhone8 снова все работает отлично. Я создал простой apk, используя webview, и у него тоже нет этой проблемы. Так что почему-то проблема только в мобильном Android Chrome. ОБНОВЛЕНИЕ 11/10/19: Проблема 2 была решена путем уменьшения размера холста и удаления всех теневых эффектов, которые занимали много памяти. Вопрос 1 до сих пор остается нерешенным, и у нас не осталось абсолютно никаких идей. Любая помощь приветствуется.

Мой проект завершен на 99%, кроме этих 2 вопросов. Я надеюсь, что смогу их исправить, потому что я действительно не хочу выбрасывать месяцы работы и переключаться на другую библиотеку javascript для игр, у которой нет такой проблемы, как PIXIJS.

Я пыталсяс RAF и RAF_SYNCHED, но по-прежнему никаких улучшений в любом сценарии. Stage.update () требуется для любой анимации. Наличие их на тикере является причиной замедления работы.

Чтобы увидеть проблему в действии, откройте этот URL: http://www.nevergone.biz/DEMO_CODE/index.html

Как проверить: откройте ссылку выше в Android GoogleРежим Chrome Portrait и затем нажмите SPIN. Во время SPIN кликните над игровым холстом или где угодно. Обратите внимание, что все зависает.

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

Ответы [ 2 ]

0 голосов
/ 19 октября 2019

Проблема № 1, по-видимому, изолирована на некоторых старых устройствах, которые используют Android Google Chrome. Проблема как-то вызвана тем, что CREATEJS использует слишком много слушателей для события stagedown. В настоящее время я жду, чтобы разработчик фреймворка дал ответ или Chrome получил серьезное обновление.

Проблема № 2 была решена путем удаления всех CSS-эффектов text-shadow, которые, очевидно, занимали много памяти.

0 голосов
/ 19 октября 2019

кеш может работать.

var testShape=new createjs.Shape(); 
testShape.graphics.beginFill("red").rect(0,0,100,100);
testShape.cache(0,0,100,100);
stage.addChild(testShape); 

// If you make changes and want to refresh the cache
testShape.updateCache()
...