Android drawBitmap Leistung für viele Bitmaps?

9

Ich schreibe gerade ein Android-Spiel und es scheint, dass ich Probleme beim Zeichnen auf Canvas habe. Mein Spiel hat mehrere Ebenen und jeder hat (offensichtlich) eine andere Anzahl von Objekten.

Das Seltsame ist, dass in einer Ebene, die 45 Bilder enthält, fehlerlos läuft (fast 60 fps). Eine andere Ebene, die 81 Bilder enthält, läuft jedoch kaum (11 fps); es ist ziemlich unspielbar. Scheint das für mich außer mir seltsam?

Alle Bilder, die ich benutze, sind .png's und der einzige Unterschied zwischen den oben genannten Ebenen ist die Anzahl der Bilder.

Was ist hier los? Kann die Leinwand in jeder Spielschleife nicht so viele Bilder zeichnen? Wie würdest du mir empfehlen, dass ich diese Leistung verbessere?

Vielen Dank im Voraus.

    
Pat Briggs 13.02.2011, 00:51
quelle

3 Antworten

3

Scheint mir auch seltsam zu sein. Ich entwickle auch ein Spiel, viele Ebenen, ich kann leicht 100 Spielobjekte auf dem Bildschirm haben, habe ein ähnliches Problem nicht gesehen.

Bei richtiger Verwendung sollte drawbitmap in der Tat sehr schnell sein; es ist wenig mehr als ein Kopierbefehl. Ich zeichne nicht einmal einheimische Kreise; Ich habe Bitmaps von vorgerenderten Kreisen.

Allerdings ist die Leistung von Bitmaps in Android sehr abhängig davon, wie Sie es tun. Das Erstellen von Bitmaps kann sehr teuer sein, da Android standardmäßig die CPUs, die CPU-intensiv sind, automatisch skaliert. All diese Dinge müssen genau einmal außerhalb Ihrer Rendering-Schleife erledigt werden.

Ich vermute, dass Sie an der falschen Stelle suchen. Wenn Sie dieselben Arten von Bildern auf die gleiche Weise erstellen und verwenden, sollte die Anzahl der Bildschirmbilder die Leistung nicht um einen Faktor von mehr als 4 verringern. Sie sollte höchstens linear sein (Faktor 2).

Mein erster Verdacht ist, dass die meiste CPU-Zeit für die Kollisionserkennung aufgewendet wird. Anders als beim Zeichnen von Bitmaps geht das normalerweise als Quadrat der Anzahl der interagierenden Objekte auf, weil jedes Objekt auf Kollision mit jedem anderen Objekt getestet werden muss. Du hast die Anzahl der Spielobjekte verdoppelt, aber deine Leistung ist auf ein Viertel gesunken, dh auf das Quadrat der Anzahl der Objekte. Wenn das der Fall ist, verzweifeln Sie nicht; Es gibt Möglichkeiten, Kollisionserkennung durchzuführen, die nicht als das Quadrat der Anzahl der Objekte wachsen.

In der Zwischenzeit würde ich grundlegende Tests machen. Was passiert, wenn Sie nicht die Hälfte der Objekte zeichnen? Läuft das Spiel viel schneller? Wenn nicht, hat das nichts mit dem Zeichnen zu tun.

    
Peter Webb 11.01.2012 05:02
quelle
1

Ich denke, dieser Vortrag wird Ihnen helfen. Geh zu den 45 Minuten. Es gibt ein Diagramm, das die Canvas-Methode und die OpenGl-Methode vergleicht. Ich denke, es ist die Antwort.

    
Uriel Frankel 08.12.2011 12:51
quelle
0

Ich hatte ein ähnliches Problem mit der Leistung - dh Level 1 lief großartig und Level 2 nicht.

Es war nicht das Rendern, das ein Fehler war (zumindest nicht speziell). Es war etwas anderes, was spezifisch für die Ebenenlogik war, die einen Engpass verursachte.

Punkt ist ... Traceview ist dein bester Freund.

Die Methode Profiling zeigte, wo die CPU ihre Zeit verbrachte und warum der Glitch in der Framerate passiert. (übrigens waren die Renderkosten in Level 2 höher, aber nicht der Flaschenhals)

    
DevByStarlight 15.09.2012 19:03
quelle