Wie verwende ich die Zoom-Geste in libgdx?

7

Ich habe den Beispielcode für die GestureListenerKlasse gefunden, aber ich verstehe die Zoom-Methode nicht:

private float initialScale = 1;

public boolean zoom (float originalDistance, float currentDistance) {
    float ratio = originalDistance / currentDistance; //I get this
    camera.zoom = initialScale * ratio; //This doesn't make sense to me because it seems like every time you pinch to zoom, it resets to the original zoom which is 1. So basically it wouldn't 'save' the zoom right?
    System.out.println(camera.zoom); //Prints the camera zoom
    return false;
}

Interpretiere ich dieses Recht nicht?

user3452725
quelle
1
Sollte es nicht camera.zoom × = ratio sein; ?
Bornander
Ich denke, diese Schnittstelle und die GestureDetector-Klasse sind nicht sehr gut durchdacht. Ich habe das gleiche Problem und versuche jetzt, eine gute Lösung zu finden.
Adam Toth
Ich denke, die Schnittstelle würde eine zoomStart(float distance)und eine zoomStop(float initialDistance, float finalDistance)Methode benötigen
Adam Toth

Antworten:

1

Jedes Mal, wenn Sie Ihre Finger auf den Bildschirm legen, originalDistance / currentDistanceergibt sich der Wert 1.

Wenn Sie diesen Wert direkt verwenden, beginnt der Zoom immer bei zoom = 1.0f.

Um dieses Problem zu beheben, sollten Sie den aktuellen Zoomfaktor zu Beginn des Zooms speichern und diesen mit dem neu berechneten Verhältnis multiplizieren. Also: auf touchDown den aktuellen Zoom nehmen : initialScale = Camara.zoom;.

Mewiki
quelle
0

initialScale sieht aus wie eine Konstante, mit der alles im Spiel skaliert wird.

zoomDie Funktion berechnet den originalDistance / currentDistanceWert, wendet ihn auf die Kamera an und druckt ihn aus.

Es ist schwer, mehr zu erzählen, ohne anderen betroffenen Code zu sehen.

Kromster
quelle