Canvas.scale() verursacht zittern

T

TM_

Neues Mitglied
1
Hallo,
ich habe ein Problem mit der scale(float, float) Methode der Klasse Canvas. Damit soll eine Grafik (.svg) vergrößert werden. Doch alle Sprites die danach gezeichnet werden, zittern ein wenig auf und ab, sobald sich die Größe ändert. Hier der Code:
Code:
                float scale = (size/100 );
                myView.testString = "scale:  " + scale;
                pCanvas.translate((float) (xpos - (width * (size / 100*sizeFak) / 2)),
                        (float) (ypos - (height * (size / 100*sizeFak) / 2)));
                pCanvas.scale(scale, scale);
                svg.renderToCanvas(pCanvas);
                pCanvas.scale(1/scale, 1/scale);
                pCanvas.translate((float) (-1*(xpos - (width * (size / 100*sizeFak) / 2))),
                    (float) (-1*(ypos - (height * (size / 100*sizeFak) / 2))));
Bei size handelte es sich um den Typ double. Habe es später zu float geändert, das hat aber leider nicht geholfen. Es liegt tatsächlich an der Scale methode, denn wnn ich diese ausklammere zittert nichts. Genauso ist es anders herum, wenn translate aus ist und dann scale wieder aktiv gemacht wird, dann tritt wieder dieses Zittern auf. Das seltsame ist nur, dass es nach einer Bewegung aussieht und nicht nach einer Größenskalieren, weshalb eine fehlerhafte Translation naheliegender wäre. Ic hbin echt ratlos, denn dieser kleine lästige Fehler hat mich schon de nganzen Tag gekostet und egal was ich auch ausprobiere, nichts hilft. Ebenso finde ich nichts im Internet, ich weiß ja auch nicht so richtig wonach ich suchen soll :/
Also ich bin für alle Vorschläge dankbar.

Nochmal ne genauerer Beschreibung wie das ganze abläuft: Es gibt mehrere Sprites, darunter ein Spielbarer Sprite und das momentane Problem-Sprite. Dieses verändert seine größe. Size wird dabei stets auf die Distanz zum spielbaren Sprite gesetzt. Wenn man die Spielfigur nun über den Bildschirm bewegt sieht man, dass alle anderen Sprites ein wenig zittern. Aber auch nur manchmal in einem völlig unregelmäßigen Muster, aber immer noch sehr häufig. Ic hschließe auf eine Fehlerhaft skallierung, da aber eigentlich keine Zahlen mit unendlich Nachkommastellen entstehen dürfte das nicht passieren. Mögliche Werte für size liegen im Intervall (1;370), Seitdem das Problem bekannt ist wird size nun auch immer gerundet. Für scale entstehen also nie Dezimalzahlen mit mehr als 2 Nachkommastellen.

EDIT:
Warum ich das überhaupt so mache: Die meisten Sprites sind Bitmaps und können so ohne den Canvas zu verändern an jede Stell gemalt werden. Für SVGs muss der Canvas jedoch transformiert werden. Vorher war auch diese Grafik eine Bitmap, da es jedoch zu laggs kam, sobald die Grafik zu groß wurde, bin ich auf SVG umgestiegen. Läuft nun immer flüssig, nie wieder laggs, aber wie gesagt ein unschönes, wenn auch kaum auffälliges, Zittern/Ruckeln/Wackeln.
 
Zuletzt bearbeitet:
Möglicherweise entsteht der Fehler beim Casten (oder beim Multiplizieren mit *-1... )
Aber konkret einen Fehler sehe ich auch nicht.
(Wäre es hier nicht ausreichend, einfach ein Minus vor die Klammern zu schreiben?)
 
ui_3k1 schrieb:
Möglicherweise entsteht der Fehler beim Casten (oder beim Multiplizieren mit *-1... )
Aber konkret einen Fehler sehe ich auch nicht.
(Wäre es hier nicht ausreichend, einfach ein Minus vor die Klammern zu schreiben?)

Ja das Minus geht auch, änert aber leider nichts. Casten ist auch kein Fehler da wie gesagt nur das scle für das Zittern verantwortlich ist und da passen die Datentypen ja alle schon
 

Ähnliche Themen

P
  • Gesperrt
  • Peter200980
Antworten
1
Aufrufe
670
swa00
swa00
G
  • Galaxy S3 / Tab 10.1
Antworten
1
Aufrufe
511
Galaxy S3 / Tab 10.1
G
N
Antworten
3
Aufrufe
1.129
S1m
S
Zurück
Oben Unten