Niska wydajność w Androidzie podczas uruchamiania APK działa dobrze w przeglądarce

12

Stworzyłem mały projekt gry w HTML5 za pomocą silnika Phaser (wypróbowałem zarówno 1.1.5, jak i 1.1.6). Następnie, aby przenieść go na platformę mobilną, użyłem Phonegap / Cordova na Windows Phone 8, Android i iOS.

W mojej grze jest około 10 elementów, które się animują (przechodzenie od punktu a do punktu b i pewna rotacja w tym samym czasie). Na iOS i Windows Phone 8 nie napotkałem żadnego problemu.

Ale w Androidzie wydajność jest nie do przyjęcia. Z drugiej strony, jeśli uruchomię grę za pomocą przeglądarki urządzenia, będzie działać płynnie bez opóźnień. Ale skompilowany APK działa bardzo gwałtownie, a elementy poruszają się bardzo wolno i migocząco.

Sprawdziłem, czy flaga akceleracji sprzętowej Androida jest ustawiona na „prawda” w pliku manifestu. Próbowałem też zmienić to na fałsz, ale nie odzwierciedlało to żadnej zmiany w wydajności.

Sprawdziłem to samo na Androidzie 4.2 na urządzeniu Samsung S2 i na tej wydajności jest lepsza. Ale w Asus Nexus Tab 7 (z systemem Android 4.4) jest bardzo nierówny, podczas gdy system operacyjny i urządzenie są najnowsze. Sprawdzono także na innym urządzeniu z Androidem 4.3 (Samsung Galaxy Grand Duos) i na tym też wydajność wcale nie jest dobra.

W mojej grze próbowałem zarówno renderowania WebGL / Canvas (silnik Phaser korzysta z Pixi.js, który wraca do płótna 2d, jeśli WebGL nie jest obsługiwany), ale bez zmian. Podobnie z Sztalugami.

Jeśli ktoś napotkał podobny problem i może zasugerować dowolny sposób na uzyskanie wydajności natywnej. Sprawdziłem przykłady cocoonjs i chociaż wydają się gładkie i akceptowalne, nie mogę wybrać tej trasy.

devilzk83
źródło
3
To pytanie jest bardzo dobrze napisane. Chciałbym wiedzieć, czy prowadziłeś test porównawczy lub profiler, aby zawęzić potencjalnego winowajcę i czy skontaktowałeś się z telefonem za pomocą zestawu łatwych kroków, aby to odtworzyć?
AturSams
Nie napisałem jeszcze do telefonu. Próbowałem profilera i nie mogłem znaleźć niczego niezwykłego w frameworku lub bazie kodu. Być może właśnie dlatego wszystko działa płynnie zarówno na komputerze, jak i przeglądarce mobilnej. Jednym z odkryć było to, że Android ma inny czas działania dla aplikacji opartych na WebView i samej przeglądarki. Ale nie mogłem znaleźć niczego, co wskazywałoby, że tak małe animowanie powoduje tak duże opóźnienie w trybie APK (WebView). W rzeczywistości ten problem pojawia się na karcie Nexusa z uruchomionym KitKat, o którym mówi się, że ma najszybszy widok internetowy (oparty na Chrome).
devilzk83
To bardzo powierzchowne spostrzeżenie z mojej strony; wygląda na to, że masz problem. Nie rozumiem, dlaczego miałaby istnieć silna rozbieżność w wydajności między wysokiej klasy urządzeniami.
AturSams,
1
Ciekawe, dlaczego nie chcesz jechać trasą CocoonJS. Uważam, że zarówno Phaser, jak i Pixi działają dobrze w CocoonJS. Co powstrzymuje Cię przed wypróbowaniem tej opcji?
Geoff,
2
Błąd powodujący słabe renderowanie CSS3 i Canvas to nowy widok internetowy oparty na Chromium i jest to totalne fiasko dla programistów Cordova / Phonegap na Androida ... Ghaaadzoooks nie testował wydajności Canvas / CSS3 w Google przed uruchomieniem KitKat za drzwi ? Mam nadzieję, że został on naprawiony szybko i mam nadzieję, że jest przezroczysty, szczególnie dla osób korzystających z telefonów komórkowych z zablokowanymi kompilacjami systemu Android innych firm ... Kompletne fiasko .. Jeśli jesteś programistą Cordova / Phonegap lub korzystasz z Webview, napisz ten błąd raportami błędów Google Android. , więcej informacji: groups.google.com/forum/#!topic/phonegap/1ZxXe6chHZc code.googl

Odpowiedzi:

2

WebView oparty na Chromium powodujący ten problem został ostatecznie zaktualizowany w KitKat w wersji 4.4.3 / 4.4.4 w połowie 2014 r., Ale to chłodny komfort, biorąc pod uwagę, że niektórzy producenci podjęli pozornie arbitralne decyzje dotyczące tego, który z ich telefonów otrzymał aktualizację, a który nie. Na przykład Samsung Galaxy S4 wciąż jest uwięziony w 4.4.2.

Postępuj zgodnie z radami udzielonymi przez inne odpowiedzi: jeśli masz grę opartą na kanwie, unikaj PhoneGap, chyba że możesz ustalić, że utknięcie w wykluczeniu telefonów z wersjami KitKat poniżej 4.4.3 jest dopuszczalne.

Weston Wedding
źródło
1

Spróbuj przerobić grę w libgdx. Libgdx jest wystarczająco szybki i nie ma takich problemów i działa na wszystkich platformach. Niestety, tylko o tym teraz myślę i nie podoba mi się pomysł konwersji js na Androida java lub cokolwiek, co robi coverter. Chociaż zajmie to trochę czasu, przetestuj LibGDX.

captainbuzz123
źródło
1

Wygląda na to, że jest to problem większości twórców gier. Podobny problem

„Często słyszę, że telefonowanie nie było najlepszym wyborem, gdy chciałem stworzyć grę na płótnie. Jest bardziej dostosowany do aplikacji internetowej na rodzimą”.

Wygląda na to, że renderuje możliwości problemów dla telefonów z systemem Android. Istnieje kilka silników, które nie radzą sobie z renderowaniem większej liczby duszków. Wiem, że 10 obiektów jest łatwych do renderowania, ale z pewnością wygląda to na problem z możliwościami renderowania.

Moja sugestia jest taka, że ​​idziesz z cocoonjs .

Sushobhit333
źródło
1

Z tą prostą grą napotkałem ten sam problem . Niestety, dzięki renderowaniu HTML5 i web / canvas, jesteś na łasce swojego telefonu - będą użytkownicy z uszkodzonymi lub słabo działającymi przeglądarkami (takimi jak moja).

Jak sugerowano @ captainbuzz123, jedynym prawdziwym rozwiązaniem jest przejście na platformę inną niż HTML5. Na razie moim wyborem jest OpenFL .

Podczas gdy moja (bardzo prosta) aplikacja Phaser działa na moim telefonie z prędkością około 8-12 klatek na sekundę, z OpenFL (ponieważ jest transponowana do C ++ i działa przez Android NDK), w końcu uzyskuję bardzo płynną i płynną pracę na moim telefonie.

Zdecydowanie warto spróbować.

ashes999
źródło
1

Aktualizacja pierwszego tygodnia 2020 roku:

Cocoonjs był prawdopodobnie solidnym rozwiązaniem tego problemu w przeszłości, ale zamykają się ... cytat z ich oficjalnej strony internetowej, który mówi wszystko

Z głębokim żalem ogłaszamy, że przestaniemy świadczyć naszą ukochaną usługę, Cocoon.

Założyliśmy Ludei / Cocoon, ponieważ wierzyliśmy, że przyszłość tworzenia aplikacji i gier będzie oparta na HTML5. Niestety tak się nie stało, a natywny rozwój jest silniejszy niż kiedykolwiek.

W rzeczywistości odzwierciedla to rozwój HTML5 na urządzenia mobilne w 2019 roku. Nie jest to niemożliwe, ale nie jest tak skuteczne, jak oczekiwano ...

Po przejściu na niektóre gry produkcyjne zbudowane z Phaserem i Cordovą na IOS i Androida zmieniam się na natywny . Masz dość uderzania w pułap wydajności nawet w najprostszej mechanice na urządzeniach średniej klasy

Wystarczy udostępnić moje następne opcje technologii / stosu do wyboru dla każdego, kto zobaczy to w teraźniejszości lub w najbliższej przyszłości:

  • SpriteKit na IOS i LibGDX na Androida: Prawdopodobnie będzie to najbardziej wydajne rozwiązanie, chociaż będzie wymagało opracowania dla każdej platformy osobno .. ale również będzie na „niskim poziomie”

  • Cocos2D-X nie do końca jest pewny, jak dobrze jest obsługiwany i czy nadal jest prawidłowym wyborem, ale powinien być bardzo dojrzały i wydajny + możesz pisać w C ++ i budować dla dowolnej platformy

  • Corona wydaje się być interesującą (i darmową) platformą dla wielu platform i platform wykonawczych, przy użyciu Lua trzeba będzie ją przetestować w porównaniu z innymi rozwiązaniami wymienionymi tutaj

  • Użyj jednego z nowoczesnych silników, takich jak Unity lub Godot . Nie jestem pewien, jak to się ma do wydajności wspomnianych frameworków

Mam nadzieję, że to pomoże każdemu ..

Blue Bot
źródło
0

Widziałem to innego dnia, być może warto spojrzeć, aby rozwiązać ten problem. Brzmi dla mnie całkiem niezły pomysł: http://tmtg.net/glesjs/

Fakt, że działa dobrze w przeglądarce, ale nie w przypadku Phonegap / Cordova, jest naprawdę bardzo dziwny. Cała sytuacja canvas / webGL na Androidzie (nie mogę mówić o iOS) zawsze wydawała mi się straszna. Zdecydowanie coś, w co GOogle musi włożyć więcej energii, być może Lollipop będzie ulepszeniem!

Milo Mordaunt
źródło