Zoomen zum und vom Punkt

Ich versuche, ein DisplayObject auf einen bestimmten Punkt zu zoomen. Ich dachte, es wäre einfach, aber ich habe jetzt einen Tag damit verbracht, es herauszufinden.

Grundsätzlich denke ich dassollte Arbeit. Schwerpunkt sollte.

//newPoint is the point being centered. There is no initial scaling, so I do not need to compensate for that (yet)
//scale is the zoom level
//container is the parent of the obj
//obj is the object being scaled/panned
var p:Point = new Point(
    ( this.container.width - this.obj.width * scale + newPoint.x * scale ) / 2, 
    ( this.container.height - this.obj.height * scale + newPoint.y * scale ) / 2 
);

this.obj.scaleX = this.obj.scaleY = scale;
this.obj.x = p.x;
this.obj.y = p.y;

Wenn die Skalierung 1 ist, wird der Punkt zentriert, jedoch mit zunehmender Skalierung immer weiter von der Mitte entfernt. Ich habe Dutzende verschiedener Methoden ausprobiert.Diese Methode, die ich auf mehreren Websites gesehen habe, lieferte die gleichen genauen Ergebnisse. Hat jemand eine Idee, wie man das zum Laufen bringt?

EDIT 10-1-12: Als Follow-up nahm ich dieCode-Auszug dass LondonDrugs_MediaServices als Grundlage für meine ursprüngliche Ausgabe zur Verfügung gestellt. Ich musste in der Lage sein, auf einen bestimmten Punkt in einem bestimmten Maßstab relativ zum nicht skalierten Bild zu zoomen (denken Sie daran, wie Google Maps auf einen bestimmten Ort zoomt). Dazu musste ich mein Bild auf den Punkt zentrieren, bevor ich den Übersetzungscode ausführen konnte. Ich habe den zusätzlichen Code unten gepostet. Für andere Zwecke (Zoomen, Scrollen und Doppelklicken) habe ich den von Vesper bereitgestellten Code verwendet, der recht gut funktioniert hat.

//obj is the object being translated
//container is its parent
//x and y are the coordinates to be zoomed to, in untranslated scaling
//obj.scaleX and obj.scaleY are always identical in my class, so there is no need to account for that


//calculates current center point, with scaling
var center:Point = new Point( ( this.container.width - this.obj.width * this.obj.scaleX ) / 2, ( this.container.height - this.obj.height * this.obj.scaleX ) / 2 );

//calulcates the distance from center the point is, with scaling
var distanceFromCenter:Point = new Point( this.obj.width * this.obj.scaleX / 2 - x * this.obj.scaleX, this.obj.height * this.obj.scaleX / 2 - y * this.obj.scaleX );

//center the object on that specific point
this.obj.x = center.x + distanceFromCenter.x;
this.obj.y = center.y + distanceFromCenter.y;

Antworten auf die Frage(4)

Ihre Antwort auf die Frage