Zoomen zu Punkt

  • GM 6

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Zoomen zu Punkt

    Ich hab ein Programm geschrieben. Und die Grafikausgabe des Programms kann man verschieben und zoomen. Beim zoomen wollte ich das dann so machen, dass man zum auf dem Bildschirm zentrierten Punkt hinzoomt. Das vergrößern an sich wird mit der variable global.zoom in einem anderen Event bewerkstelligt, die Zentrierung auf den gewünschten Punkt bekomme ich aber irgendwie nicht wirklich hin:

    GML-Quellcode

    1. angle = point_direction(room_width/2,room_height/2,x,y)
    2. oldzoom = global.zoom
    3. olddist = distance_to_point(room_width/2,room_height/2)
    4. global.zoom += 0.1
    5. newdist = (olddist/oldzoom)*global.zoom
    6. togo = newdist - olddist
    7. x += lengthdir_x(togo,angle)
    8. y += lengthdir_y(togo,angle)
    Alles anzeigen


    Damit holt er sich die Entfernung zum Zentrum, berechnet sich die benötigte neue Entfernung und - zumindest in der Theorie - bewegt sich an den richtigen Punkt. Aber sogar, wenn das Objekt schon zentriert ist, bewegt sich die X-Achse endlos weit (naja, etwa 15.000 Pixel weit) nach rechts - die Y-Achse bewegt sich an die 30.000 ins negative, wenn sie nicht zentriert ist. Das ist nicht Sinn der Übung.

    Ich hab lange drüber nachgedacht, was da falsch gelaufen sein könnte, hab aber ums verrecken nichts gefunden. Kann mit vielleicht wer helfen? Ist der Ansatz vielleicht sogar zur Gänze falsch? Ich mein, so gut bin ich nicht in Mathe.
  • Nein, die neue Distanz ist ja größer als die alte und ich will keinen negativen Wert haben. Das mit der Richtung liefert schlicht ein anderes Ergebnis und wenn man beide Verbesserungen gleichzeitig reinbringt dürfte es den Output nicht einmal beeinflussen (olddist-newdist = (newdist-olddist)*-1 und die Richtung wäre um 180° versetzt)
    Edit: Jetzt funktioniert es. Distance_to_point hat einen falschen Wert gegeben, vermutlich, weil dem Objekt kein Sprite zugewiesen ist. Hab distance_to_point nun mit point_distance ersetzt und es ging. Yay!

    GML-Quellcode

    1. angle = point_direction(room_width/2,room_height/2,x,y)
    2. oldzoom = global.zoom
    3. olddist = point_distance(840,525,x,y)
    4. global.zoom += 0.1
    5. newdist = (olddist/oldzoom)*global.zoom
    6. togo = newdist - olddist
    7. x += lengthdir_x(togo,angle)
    8. y += lengthdir_y(togo,angle)

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von HeartAttack ()