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?


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;.


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.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.