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.
źródło
Odpowiedzi:
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.
źródło
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.
źródło
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 .
źródło
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ć.
źródło
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
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 ..
źródło
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!
źródło