Seltsame Stottern Probleme, die ich nicht loswerden kann (vollständige Quelle enthalten)

9

Ich habe mein Spiel auf das Beispiel des Lunarlanders gestützt und stottere Probleme, seit ich angefangen habe es zu machen. Nichts, was ich versucht habe, hat sie losgeworden, also bin ich an den Punkt gekommen, wo ich ein paar Stunden damit verbracht habe, eine abgespeckte Version des Lunarländer-Beispiels zu erstellen, und ein einfaches Scrolling-Bild eingefügt habe, um das Stottern zu zeigen. HINWEIS: Es bezieht sich nicht auf den Garbage Collector. Wenn Sie denken, dass es ist, schauen Sie sich einfach das Protokoll an, der Garbage Collector läuft nirgends so oft wie das Stottern erscheint.

Das Bild, das den Bildschirm nach unten scrollt, stottert ungefähr jede Sekunde für ungefähr eine Zehntelsekunde auf meinem Telefon (Motorola Milestone, 2.2). Diese Art von Stottern zerstört das Gameplay nicht genau, aber es ist sehr störend und frustrierend. Mein Spiel beinhaltet auch eine Menge schnelles Scrollen und schnelle Bewegungen, daher ist es im Allgemeinen dort offensichtlich.

Wenn einer von euch die Zeit hat, könntest du dir dieses Eclipse-Projekt ansehen und sehen, ob:

  1. Es stottert für Sie auf Ihrem Handy (schauen Sie genau, wie es scrollt, es hat eine kleine Kupplung jede halbe Sekunde bis zweieinhalb)
  2. Wenn Sie eine Möglichkeit finden, das Stottern zu beheben

Ich hoffe, dass ich einfach eine verzögerte Codezeile habe, die diese ganze Sache verursacht, ohne dass ich es merke. Ich kann einfach nicht glauben, dass selbst nach dem Entfernen so viel hat es immer noch die gleiche Menge an Stottern als mein komplettes Spiel mit 1000 Objekten, vor allem, da es auf meinem Handy mit einer festen 60fps läuft.

EDIT: Habe mein Spiel auf Traceview profiliert, es scheint in Ordnung.

Download-Link zur Quelle: Ссылка

    
Smills 02.02.2011, 20:59
quelle

4 Antworten

1

Ich habe es auf meinem Handy (nexus one) versucht, es war das gleiche für mich.

Ich habe ein paar Änderungen vorgenommen, die es für mich besser gemacht haben:

  1. Anstatt jedesmal während der Schleife neue Variablen zu deklarieren, deklarierte ich die as-Eigenschaften der Klasse

    Leinwand c = null; // wird

    private Leinwand c;

    // In der Schleife benutze jetzt einfach

    c = null

Machen Sie dies für alle Variablen, die Sie immer wieder deklarieren, in den Funktionen doDraw und updatePhysics.

  1. anstatt die Ansicht zu erhöhen, bis für immer, ich habe nur ein wenig wenn statmant

    if (viewY & gt; mCanvasHeight) {

    %Vor%

    }

Ich bin mir nicht sicher, ob es jetzt 100% funktioniert, aber scheint mir viel besser.

    
Tosa 06.02.2011 15:06
quelle
0

Es klingt, als ob Ihr Scrollen viel Müll erzeugt, der häufig gesammelt werden muss. Wenn Sie viele kurzfristige kleine Objekte erstellen, sollten Sie Ihren eigenen Pool verwalten. Solange Sie nicht zulassen, dass der Pool ohne Grenzen wächst, kann dies den GC vor dem Timing stark einschränken.

    
Ted Hopp 02.02.2011 21:24
quelle
0

Ich habe es auf einem Verizon DroidX (2.2.1) getestet und es sieht aus wie alle 3-6 Sekunden und sehr kurz. Es scheint etwas besser mit dem aktiven Hintergrund aus und nichts anderes läuft. Vielleicht kann das Grafik-Subsystem einfach nicht mithalten? Haben Sie ein weniger grafikintensives Bild (weniger Pixel und weniger Farben) probiert, nur um zu sehen, was es macht?

    
R Hughes 12.02.2011 05:24
quelle
0

Sie zeichnen pro Bild drei riesige Hintergrund-Bitmaps ... das ist mehr Arbeit als nötig. Es kann besser sein, ein BitmapShader zu verwenden, wenn TileMode auf Wiederholen eingestellt ist. Dann ist es nur ein Anruf in die native Schicht.

Fügen Sie ein Paint paint; -Member irgendwo hinzu und ändern Sie Ihre setSurfaceSize() so, dass sie die folgenden Zeilen enthält:

%Vor%

Dann muss doDraw() nur das sein:

%Vor%

Ich habe das nicht gemessen, um beweisen es ist schneller, aber was ich über Grafik-APIs weiß, sollte es sicherlich sein.

(Wenn Sie wirklich fliegen wollen, sollten Sie OpenGL ES benutzen ...)

    
Reuben Scratton 13.02.2011 13:10
quelle

Tags und Links