Sprite Rotation in Android mit Canvas.DrawBitmap. Ich bin nahe, was mache ich falsch?

7

Ich habe diesen Sprite-Rotationsalgorithmus (der schlecht benannt ist und nur zum Testen verwendet wird). Es ist so nah, die damit gezeichneten Sprites rotieren. Jeder Frame kann ich +5 Grad hinzufügen und sehen, wie mein nettes kleines Sprite sich dreht. Das Problem ist, dass das andere auf die Leinwand gezeichnete Material nun flackert. Wenn ich die Rotation nicht mache, funktionieren die normal gezeichneten Sprites großartig. Ich denke, ich bin nah dran, aber ich weiß einfach nicht, welches Stück ich vermisse. Unten sind meine beiden "Draw_Sprite" -Methoden, man zeichnet nur die zuvor ressourcengeladene Bitmap auf die Leinwand, die übergeben wird. Die andere, macht eine Drehung, die ich am besten weiß, wie man das Sprite um x viele Grad dreht..und dann zeichne es . Wenn ich eine nette Spielschleife habe, die mehrere Objekte zeichnet, ist ein Typ der gedrehte Typ. Dann flackern die nicht gedrehten Sprites und doch tut das gedrehte Sprite niemals. Wenn ich zuerst die nicht gedrehten Sprites zeichne, ist alles in Ordnung, aber dann könnte die Z-Anordnung versaut werden (Sprites über den UI-Elementen usw.) ... Die Methodendefinitionen:

%Vor%

Und jetzt die Verwendung:

%Vor%

Es ist also so, dass Dinge nach einem Aufruf einer Rotationszeichnung korrekt gezeichnet werden. Aber das Problem ist es flimmert. Nun könnte man sagen, ich sollte einfach all meine nicht-rotierenden Sachen machen und das letzte speichern, aber die Zerrung wäre weg .... Vorschläge, wie man dieses Problem des Zordens oder des Flackerns angeht?

    
Codejoy 27.08.2010, 19:48
quelle

2 Antworten

8

Versuchen Sie es mit canvas.save () vor der Drehung und canvas.restore () nach Abschluss der Bearbeitung.

Wenn Sie Änderungen an der Leinwand vornehmen, um die Art und Weise zu ändern, wie ein Objekt gezeichnet wird, müssen Sie sich an die Manipulationen erinnern, die festgelegt wurden, wie die Leinwand Ursprünge behandelt ... Wenn Sie also die Leinwand übersetzen oder drehen, wird dies für die Lebensdauer dieser Leinwand. Um dies zu vermeiden, rufen Sie zuerst save auf, das einen Snapshot der Canvas-Matrix speichert, bevor Sie sie bearbeiten, dann führen Sie alle Ihre Änderungen aus und rufen dann restore auf, wodurch die Canvas wieder auf den zuletzt gespeicherten Punkt zurückgesetzt wird. Andernfalls bauen sich alle Änderungen auf und Sie erhalten unbeabsichtigte Ergebnisse.

    
methodin 08.10.2010, 13:17
quelle
15

Nur für den nächsten Typ, der das lesen kann. Sie können dies mit nur ein paar Zeilen Code tun:

%Vor%     
JP_ 30.12.2011 05:52
quelle

Tags und Links