schlaue Zoomformel?

BIAsTeR

Mitglied
Moin,

ich habe ein Karte, die beim Laden ins Flashfenster(1024x768) passt, links und rechts sind aber noch freie Bereiche.
Ich kann in der Karte auf Bereiche klicken und die Karte rückt den Bereich ins Zentrum des Fensters und vergrößert den Ausschnitt.
Weiterhin kann man auch über Buttons in der Karte hin und her laufen; also links rechts oben unten...

Aber wenn ich jetzt über einen zusätzlichen Zoombutton noch weiter reinzoomen möchte, wie stell ich das an?
Skalieren - klar. x - y verschieben - klar.
Aber gibt es eine schlaue Formel, die den Mittelpunkt des aktuell zu sehenden Ausschnitts nimmt und diesen als Zentrum zum zoomen nimmt?

Beispiel SWF würd ich gern dranhängen, aber ist alles dynamisch und ich müssten noch XML-Dateien und Grafiken dazutun...
Auf Anfrage Mail ich den ganzen Haufen (in Summe um die 20 MB) gerne weiter.

Programmiert ist das ganze mit Flash 8; AS2.

mfg
Ben
 
Nur mal so als Ansatz:

Du kannst ja beim Klick auf die Karte die _xmouse und _ymouse Eigenschaft abfragen und dann damit berechnen, wie weit es zur Mitte ist.

Diese Werte kannst du dann in der Tween Klasse verwenden um die Karte richtung Mitte zu fahren.


Sollte eigentlich funktionieren... teste es mal ;)

mfg
 
Du meinst das so, das wenn ich auf eine Region klicke sagen wir in Variable "region_x" und "region_y" die Koordianten gespeichert werden. Wenn ich dann auf "zoom" klicke, muss ich erst den x/y Wert des Mittelpunkts des gesamten gezoomten Bildes errechnen und die Regionalwerte mit dem Mittelpunkt verrechnen?
Ich arbeite zwar nicht mit dem Tween (sollte ich wohl, damit der Code schöner ist), sondern mit ner banalen x/y Verschiebung, aber ich denk vom Konzept her dürft sich daran nich viel tun.

Ich werds mal heut abend so versuchen und das Ergebnis posten.
Schonmal schönen Dank für die Idee.

Ben
 
Zuletzt bearbeitet:
Ok. Ich hab jetzt mal die Werte (Beispiele) getraced die ich benötige:

// Bildausmaße
Bildbreite: 4804.55 Bildöhe: 4225.2
// X/Y des Bildmittelpunktes
Bildmittelpunktbreite: 2402.275 Bildmittelpunkthöhe: 2112.6
// Bildmittelpunkt auf den gezoomt wird beim klicken auf eine Region
Regioncenter_x: -2153.95 Regioncenter_y: -1050.2
// Entfernung von dem Regionalen x/y Wert zum absoluten Bildmittelpunkt
Entfernung zum X-Bild_Mittelpunkt: 4556.225 Entfernung zum Y-Bild_Mittelpunkt: 3162.8

Aber irgendwie komm ich nicht auf die Formel, mit der ich diese Werte verrechnen muss, wenn ich weiter auf "zoom" klicke.
Bei der Zoomfunktion, wird der MovieClip um 10% je Achse vergrößert und danach verschoben in x und y Richtung. Bisher hatte ich provisorisch nen absoluten Zahlenwert verwendet, der aber natürlich überhaupt nicht optimal ist....

Das was ich bisher hab, ist der absolute Mittelpunkt, welcher sich meiner Meinung nach so bildet:
Code:
	var totalcenterx:Number = (1024/2)-(_root.mc_bilder._width/2)+absolutleft;
	var totalcentery:Number = (768/2)-(_root.mc_bilder._height/2)-absoluttop;
	_root.mc_bilder._x = totalcenterx+region_x_unterschied;
	_root.mc_bilder._y = totalcentery+region_y_unterschied;

Ich verwende nicht Stage.height und width, da ich das ganze im Zusammenspiel mit Adobe Air verwende und da irgendwie Inkompatibilitäten bei der Übergabe dieser Werte bestehen. absolutleft und top sind Werte die ich vorher definiert habe um "mc_bilder" zu positionieren.
Wenn ich "region_x_unterschied" dazuaddiere, zoomt Flash immer in die linke obere Ecke, zum natürlichen 0-Punkt.

Hatt wer ne Idee was ich dazu addieren / subtrahieren muss?

Ben
 
irgendwie komm ich langsam an das Ergebnis ran (hoffe ich)...
Inzwischen schaff ich es, dass wenn ich nur zoome von 100% aufwärts ohne die Karte zu verschieben, dass die Karte optimal zentriert wird....
Code:
_root.mc_bilder._x = 1024/2-XMLsublocation_x[position]*6.5;
_root.mc_bilder._y = 768/2-XMLsublocation_y[position]*6.5;

wenn ich jetzt die Karte verschiebe und dann zoome, dann passts ungefähr, aber zur Kante hin wirds immer ungenauer von der Zentrierung.
Code:
        //posveraenderung ist die variable in der die veränderung nach oben/unten/links/rechts gespeichert wird
	if (posveraenderung_x>-0.01){
		_root.mc_bilder._x = totalcenterx+posveraenderung_x*(_root.mc_bilder._xscale/100);
		if (posveraenderung_y>-0.1){
			_root.mc_bilder._y = totalcentery+posveraenderung_y*(_root.mc_bilder._xscale/100);
		}else {
			_root.mc_bilder._y = totalcentery+posveraenderung_y*(_root.mc_bilder._xscale/100);
		}
	}else{
		_root.mc_bilder._x = totalcenterx+posveraenderung_x*(_root.mc_bilder._xscale/100);
		if (posveraenderung_y>-0.1){
			_root.mc_bilder._y = totalcentery+posveraenderung_y*(_root.mc_bilder._xscale/100);
		}else {
			_root.mc_bilder._y = totalcentery+posveraenderung_y*(_root.mc_bilder._xscale/100);
		}
	}
sieht da wer nen logischen Fehler in dem Code bzw. woran es liegen könnte, dass es je weiter man nach aussen kommt immer schlechter wird?

ben
 
Zurück