Ich habe ein kleines Spielprojekt in HTML5 mit der Phaser- Engine erstellt (habe sowohl 1.1.5 als auch 1.1.6 ausprobiert). Um es dann auf eine mobile Plattform zu portieren, wurde Phonegap / Cordova für Windows Phone 8, Android und iOS verwendet.
In meinem Spiel gibt es ungefähr 10 Elemente, die animiert werden (von Punkt a nach Punkt b und einige Rotationen gleichzeitig). Unter iOS und Windows Phone 8 gab es keine Probleme.
Aber mit Android ist die Leistung nicht akzeptabel. Wenn ich mein Spiel hingegen über den Gerätebrowser starte, läuft es reibungslos und ohne Verzögerung. Aber die kompilierte APK läuft sehr ruckelig und die Elemente bewegen sich sehr langsam und flackernd.
Ich habe geprüft, dass das Android-Hardware-Beschleunigungs-Flag in der Manifest-Datei auf "true" gesetzt ist. Versuchte es auch falsch zu ändern, aber das spiegelte keine Änderung in der Leistung wider.
Ich habe das gleiche auf Android 4.2 auf dem Samsung S2-Gerät überprüft und auf dieser Leistung ist besser. Aber auf Asus Nexus Tab 7 (mit Android 4.4) ist es sehr ruckelig, während das Betriebssystem und das Gerät beide auf dem neuesten Stand sind. Auch überprüft auf einem anderen Gerät mit Android 4.3 (Samsung Galaxy Grand Duos) und auch auf diesem ist die Leistung überhaupt nicht gut.
In meinem Spiel habe ich sowohl WebGL / Canvas-Rendering versucht (Phaser-Engine verwendet Pixi.js, die auf 2D-Canvas zurückgreifen, wenn WebGL nicht unterstützt wird), aber keine Änderung. Ähnliches gilt für easeljs.
Wenn jemand anderes mit ähnlichen Problemen konfrontiert ist und eine Möglichkeit vorschlagen kann, wie Leistung zu erzielen. Ich habe die Beispiele von cocoonjs überprüft und obwohl sie glatt und akzeptabel erscheinen, kann ich diesen Weg nicht einschlagen.
quelle
Antworten:
Das Chromium-basierte WebView, das dieses Problem verursacht, wurde schließlich Mitte 2014 in KitKat Version 4.4.3 / 4.4.4 aktualisiert. Dies ist jedoch ein Trost, wenn man bedenkt, dass einige Anbieter scheinbar willkürliche Entscheidungen darüber getroffen haben, welches ihrer Telefone das Update erhalten hat und welches nicht nicht. Samsung Galaxy S4 ist zum Beispiel immer noch in 4.4.2 gefangen.
Befolgen Sie die Ratschläge anderer Antworten: Wenn Sie ein Canvas-basiertes Spiel haben, vermeiden Sie PhoneGap, es sei denn, Sie können feststellen, dass das Ausschließen von Handys mit KitKat-Versionen unter 4.4.3 akzeptabel ist.
quelle
Versuchen Sie, Ihr Spiel in libgdx neu zu erstellen. Libgdx ist schnell genug und hat keine derartigen Probleme. Es funktioniert auf allen Plattformen. Leider ist dies nur das, woran ich im Moment denken kann, und ich mag die Idee, js in android java umzuwandeln, oder was auch immer dieser Coverter tut, nicht. Obwohl dies einige Zeit in Anspruch nehmen wird, sollten Sie LibGDX testen.
quelle
Scheint, dass dies ein Problem bei den meisten Spieleentwicklern ist. Ähnliches Problem
"Ich werde oft gehört, dass Phonegap nicht die beste Wahl war, wenn es darum ging, ein Canvas-Spiel zu erstellen. Es ist eher an Web-Apps als an native Spiele angepasst."
Es scheint, Ausgabe Fähigkeiten für Android-Handys zu rendern. Es gibt einige Engines, die nicht mehr mit dem Rendern von Sprites umgehen können. Ich weiß, dass 10 Objekte einfach zu rendern sind, aber es sieht definitiv problematisch mit den Renderfunktionen aus.
Mein Vorschlag ist, dass Sie mit Cocoonjs gehen .
quelle
Ich bin auf dasselbe Problem mit Phaser gestoßen (mit diesem einfachen Spiel ) auf . Leider sind Sie mit HTML5 und Web- / Canvas-Rendering der Gnade Ihres Telefons ausgeliefert - es gibt Benutzer mit defekten oder schlecht funktionierenden Browsern (wie meinen).
Wie von @ captainbuzz123 vorgeschlagen, besteht die einzige echte Lösung darin, auf eine Nicht-HTML5-Plattform umzusteigen. Mein Werkzeug der Wahl fürs Erste ist momentan OpenFL .
Während meine (sehr einfache) Phaser-App mit OpenFL auf meinem Telefon mit etwa 8-12 FPS ausgeführt wird (weil sie in C ++ übersetzt und über das Android NDK ausgeführt wird), wird die Leistung meines Telefons sehr flüssig.
Es ist definitiv einen Versuch wert.
quelle
Ein Update für die erste Woche des Jahres 2020:
Cocoonjs war wahrscheinlich eine solide Lösung für dieses Problem in der Vergangenheit, aber sie werden heruntergefahren. Ein Zitat aus ihrer offiziellen Website , das alles sagt
Dies spiegelt tatsächlich die HTML5-Entwicklung für Mobilgeräte im Jahr 2019 wider. Nicht, dass dies nicht möglich wäre, aber es ist nicht effektiv, wie erwartet ...
Nach einigen mit Phaser und Cordova erstellten Produktionsspielen wechsele ich zur nativen Entwicklung für IOS und Android erstellt wurden, . Wir haben es satt, die Leistungsgrenze selbst bei den einfachsten Mechaniken für mittlere Endgeräte zu erreichen
Nur um meine nächsten Tech- / Stack-Lösungsoptionen mitzuteilen, aus denen ich in der Gegenwart oder in naher Zukunft auswählen kann:
SpriteKit für IOS und LibGDX für Android: Dies wird wahrscheinlich die leistungsstärkste Lösung sein, obwohl für jede Plattform eine eigene Entwicklung erforderlich ist.
Cocos2D-X ist sich nicht wirklich sicher, wie gut es unterstützt wird und ist es immer noch eine gültige Wahl, aber es sollte sehr ausgereift und performant sein + Sie können in C ++ schreiben und für jede Plattform bauen, die es gibt
Corona scheint ein interessantes (und kostenloses) plattformübergreifendes und performantes Framework zu sein. Wenn Sie Lua verwenden , müssen Sie es mit den anderen hier genannten Lösungen vergleichen
Verwenden Sie einen der modernen Motoren wie Unity oder Godot . Ich bin nicht sicher, wie dies im Vergleich zu den genannten Frameworks in Bezug auf die Leistung ist
Hoffe das hilft jedem ..
quelle
Sah dies neulich, könnte ein Blick wert sein, um dieses Problem zu lösen. Klingt für mich nach einer ganz netten Idee: http://tmtg.net/glesjs/
Die Tatsache, dass es im Browser gut funktioniert, aber nicht auf Phonegap / Cordova, ist in der Tat sehr seltsam. Die ganze Canvas / WebGL-Situation auf Android (kann nicht für iOS sprechen) erschien mir immer ziemlich schrecklich. Auf jeden Fall etwas, in das Google mehr Energie stecken muss, vielleicht ist Lollipop eine Verbesserung!
quelle