In meinem Spiel zeichne ich in jedem Frame eine Menge Linienrechtecke - es ist eine Nachbildung eines elektronischen Handheld-Spiels der alten Schule. Diejenigen, die grobe Punktmatrix-Display für das Hauptspiel und benutzerdefinierte Bilder für Text oder einige Bilder hatte.
Ich habe 20x20 große "Pixel" auf einem virtuellen Punktmatrix-Bildschirm, ich zeichne auch einige 7-Segment-Anzeigen auf dem Bildschirm und einige andere Dinge.
Laut TraceView wird die meiste Zeit mit den Methoden drawLine und drawRectangle verbracht, weil es einfach zu viele davon gibt. Ich zeichne jedes 'Pixel' der Punktmatrixanzeige und jedes Segment der 7-Segment-Anzeigen in jede Rahmen.
Mir kam eine Optimierung in den Sinn, dass ich nur die Pixel/Segmente neu malen würde, die sich verändert haben, also habe ich den vorherigen Zustand der Pixel/Segmente gespeichert und versucht, nur die veränderten neu zu malen. Im Grunde ist es eine grobe Invalidierung.
Ich hatte erwartet, dass die Leinwand so bleiben würde, wie sie war, nachdem der letzte Rahmen fertig bemalt war, und dass ich nur das Nötigste neu streichen würde.
Leider flackerte mein Canvas auf schwarz und ab und zu, wenn sich der Zustand meines Bildschirms änderte, flackerten nur Pixel der Punktmatrixanzeige/-segmente für einen Frame auf. Und ich habe sichergestellt, dass ich meine Leinwand nicht gelöscht habe.
Ich zeichne auf einem Canvas innerhalb einer SurfaceView und aktualisiere den Thread, so wie es im Lunar Lander Android-Beispiel beschrieben ist. Im Lunar Lander-Beispiel wird alles in jedem Frame neu gemalt.
Vielleicht könnte ich alles zu einer Bitmap auf dem ersten Frame rendern, dann aktualisieren Sie diese Bitmap auf jedem anderen Frame?
Welche Technik sollte ich für meine paint()-Methode verwenden?