Ich portiere ein 2D Action-Spiel von Windows Phone 7 (in XNA 4.0 entwickelt) auf Android. Ich verwende eine Menge von Canvas.drawBitmap () -Aufrufen - etwa 200-300 pro Frame-Aktualisierung - mit verschiedenen Farben für jeden Aufruf, um unterschiedliche Transparenz und Farbgebung beim Zeichnen zu handhaben -Zeit. Dies beinhaltet das Verwalten von Partikelsystemen und verschiedenen anderen Overlays und In-Game-Effekten sowie einen gekachelten Hintergrund und In-Game-Sprites. Ich mache keine On-Demand-Größenänderung oder rotierende, es ist einfach src- & gt; dest Rechtecke der gleichen Größe.
Auf WP7 läuft das mit 30 + fps, aber ich kämpfe um 12fps auf meiner Test Droid Hardware (Samsung Galaxy S). Dies macht das Spiel unspielbar. Nach dem Profilieren des Codes habe ich bestätigt, dass meine gesamte Zeit in Canvas.drawBitmap () verloren geht
Ich glaube, ich befolge alle üblichen Leistungsempfehlungen - benutze ein SurfaceView, achte auf GC und erschaffe möglichst viele wegwerfbare Objekte und vermeide Drawables.
Habe ich richtig verstanden, dass Canvas.drawBitmap () CPU-gebunden ist, und wenn ich die Leistung verbessern möchte, muss ich zu OpenGL wechseln, das die GPU verwendet? Ich kann nicht finden, dass es überall unverhüllt ist, aber zwischen den Zeilen einiger Kommentare zu lesen, denke ich, dass das vielleicht mein nächster Schritt sein müsste ...?
Das ist normal. Canvas ist erstaunlich langsam bei Verwendung von Transparenz (wie ARGB_8888
).
2 Optionen:
RGB_565
so gut wie möglich). Tags und Links android android-canvas opengl-es xna frame-rate