Android Spiel, Leinwand oder opengl?

Ich bin ein Spiel für Android zu schreiben, ich muss zwischen Leinwand oder opengl zum Zeichnen wählen. Ich habe gelesen, dass Leinwand keine gute Framerate hat, aber was ist gut? Stell dir vor, du würdest ein wütendes Vögelspiel schreiben, wäre Segeltuchframerate genug?

  • Zeichnen von Pfaden und Hardwarebeschleunigung
  • Screenshot von Android OpenGL nehmen
  • Wie schreibe / schreibe das Schreiben in OpenGL Tiefenpuffer in GLSL
  • Kommissionierobjekt funktioniert nicht?
  • Wie gehe ich Textur auf eine gewölbte Oberfläche?
  • Minimum erforderlich Texture Größe für die Einhaltung von OpenGL-ES 2.0 auf Android?
  • Sind OpenGL ES Vertex Array Objekte in jedem Android Emulator unterstützt?
  • Verwenden von Pixelpufferobjekten (PBOs) auf Android
  • 3 Solutions collect form web for “Android Spiel, Leinwand oder opengl?”

    Ich schrieb mein Spiel zunächst mit Canvas, musste aber aus folgenden Gründen auf OpenGL wechseln:

    • Mit Canvas werden deine Sprites auf dem Heap gespeichert (es sei denn, du gehst sie spezifisch auf die Festplatte), das setzt eine Grenze für die Gesamtgröße deiner Sprite-Assets je nach Telefon – nicht gut! Ich fand, dass dies um 42 MB auf meinem Handy war – beachten Sie, dass dies die unkomprimierte Größe von Bitmaps ist. Wenn Sie mehrere Arten von Entity haben, mit jeweils verschiedenen Animationen, dann können Sie diese Größe sehr schnell erreichen.

    • OpenGL speichert Ihre Sprite-Assets separat zum Heap, was den Speicher drastisch erhöht.

    • Canvas skaliert nicht sehr gut. Je mehr .draw (…) ruft dich an, je langsamer es läuft. Die Beziehung ist ziemlich linear.

    • Mit OpenGL kannst du deine Draw-Anrufe zusammenreißen, um die Performance zu verbessern.

    Es kann einschüchtern, beginnend mit OpenGL, die Canvas scheint ansprechend macht. Doch aus Erfahrung wünsche ich, dass ich gerade mit OpenGL angefangen habe. Meine Empfehlung wäre, die Kugel zu beißen und mit OpenGL zu gehen, wenn du ein Spiel machst.

    Um die Dinge etwas leichter loszulegen, habe ich einige nützliche Hilfsklassen geschrieben, die alle nitty kiesige OpenGL für dich machen. Sie erlauben Ihnen, einfache .draw (..) Anrufe ähnlich wie bei der Verwendung von Canvas zu machen. Das folgende Video-Tutorial sollte Sie beginnen:

    http://www.youtube.com/watch?v=xc93rN2CGNw

    EDIT: 03/04/13

    Es scheint, dass als neuere Android-Geräte und Betriebssysteme kommen Google hat die Leistung von Canvas erhöht. Ein Benutzer der Utility-Klasse, die ich oben beschreibe, kam zu mir mit der folgenden E-Mail zurück, nachdem ich ein Benchmarking gemacht hatte:

    Zeichnung 500 Sprites an zufälligen Positionen über Leinwand jeden Rahmen.

    Hier sind die Ergebnisse: Huawei Honor (Lebkuchen, Single Core 1.4 Ghz): SpriteBatcher: 19-20 FPS, Canvas: 23-24 FPS

    Nexus 7 (JellyBean, 4 Kerne 1,3 Ghz): SpriteBatcher: 29-30 FPS, Leinwand: 57-58 FPS

    Nun, in meiner Antwort auf diesen Benutzer erklärte ich, dass dies mit Ineffizienzen in der Art, wie ich die Utility-Klasse SpriteBatcher geschrieben habe, zu tun haben könnte. Aber aus meiner eigenen Erfahrung mit Canvas zurück auf ein HTC Desire läuft Froyo 2.2 Ich kann sagen, dass es definitiv langsamer Sprite für Sprite war!

    Bei späteren Betriebssystemen und Geräten kann es auf Effizienz überholt werden, aber einige der Punkte in meiner ursprünglichen Antwort sind immer noch gültig. Zum Beispiel, um eine OutOfMemoryException zu treffen, ohne auf das Caching von Texturen auf die Disc zurückgreifen zu müssen.

    Wenn ich mehr lerne, werde ich diese Antwort weiter aktualisieren.

    Es hängt alles von der Art des Spiels ab, das du implementieren musst.

    Wenn man bedenkt, dass Sie nach einer Leinwand-Implementierung fragen, ich vermute, dass Sie sich auf ein reines 2D-Sprites-Spiel beziehen.

    Wenn die Sprites sind nicht viele und die Zahl ist sehr niedrig, die Wahrheit ist, dass potenziell Sie wollen einen großen Unterschied (betrachten, dass viele viele Spiele mit grundlegenden 2D-Grafiken verwenden Leinwand).

    Wenn Leistung zählt oder Sie haben eine sehr hohe Anzahl von Sprites dann ist es wert, ein OpenGL-basiertes System zu implementieren.

    Denken Sie daran, dass mit OpenGL profitieren Sie von der GPU dedizierte Hardware, so dass Ihre CPU wird von der Last der Grafik-Rendering entladen werden.

    Darüber hinaus profitieren Sie von viel mehr Flexibilität als eine Leinwand Umsetzung mit Blending, Beleuchtung, Post Verarbeitungseffekte. Es gibt wirklich keine Grenzen, was du tun kannst.

    Ein einfaches Beispiel ist Rotation und Skalierung, die mit einer 3D-Engine wie OpenGL ist sehr billig und bietet hervorragende Ergebnisse.

    Canvas muss wirklich für einfache Implementierungen angenommen werden.

    PS, wenn du für OpenGL ES 2.0 und programmierbare Pipeline gehst, hast du wirklich keine Grenzen, was du erzählst (leuchtend, verwischt und Tausende verschiedene Optionen). Die Grenze ist wirklich unsere Fantasie in diesem Fall.

    🙂

    Wenn du so ein tolles Spiel machst, dann solltest du unbedingt die Verwendung von AndEngine beachten: http://www.andengine.org/

    Wenn es richtig ist, ist es eine tolle Hilfe. Leider gibt es keine Dokumentation im Code. Aber das Forum auf der Seite ist ganz okay. Und auch hier gibt es noch mehr Fragen zu AndEngine. Zum Glück gibt es eine Reihe von guten Beispielen, um Ihnen den Anfang zu bringen.

    AndEngine nutzt OpenGL – also musst du dich nicht mit evtl. niedrigen Frameraten herumlaufen, während du auf die Leinwand ziehst.

    Schauen Sie sich die Beispiele an App: https://market.android.com/details?id=org.anddev.andengine.examples

    Das Android ist ein Google Android Fan-Website, Alles über Android Phones, Android Wear, Android Dev und Android Spiele Apps und so weiter.