Hallo @ll,

ich habe ein Problem.
Lege auf einem Objekt mehrere Objekte ab. Nun will ich diese zoomen, bzw. wieder rauszoomen.
Das größte und unterste Object merkt sich in einem Array welche Objekte darauf liegen.

Folgender Algorithmus funktioniert zwar, aber irgendwie verschieben sich die abgelegten Objecte immer ganz komisch, so dass sie sogar über die grenzen des unteren Objekts „hinauswandern“.

Ich habe schon verschiedenes ausprobiert, aber leider nicht geschafft, dass die Verhältnisse korrekt bleiben.. 

Was mache ich hier falsch? Liegt an einem geometrisch falschen Gedanken?


Nehmen wir erst mal das Reinzoomen. Screens_ar sind die untersten Objecte abgelegt, die darauf liegenden sind jeweils im Array assigned;

hier habe ich versucht, die differenz der Objecte im Voraus zu speichern/ im unteren Code auskommentiert.
Code :
1
2
3
4
5
6
7
for (var m = 0; m< screens_ar.length; m++) {
    for (var n = 0; n < screens_ar[m].assigned.length; n++) {
         screens_ar[m].assigned[n].zoomDiffX = screens_ar[m].assigned[n].x - screens_ar[m].x;
         screens_ar[m].assigned[n].zoomDiffY = screens_ar[m].assigned[n].y - screens_ar[m].y;
    }
    
}

Das sollte die Lösung sein.. Den Zoomout part lasse ich jetzt mal weg.
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
function zoomIn(iconEvent:MouseEvent) {
    trace("try to zoomIn");
    for (var i = 0; i < screens_ar.length; i++) {
 
        for (var j = 0; j < screens_ar[i].assigned.length; j++) {
            var diffX:Number = screens_ar[i].assigned[j].x - screens_ar[i].x;
            var diffY:Number = screens_ar[i].assigned[j].y - screens_ar[i].y;
            trace(" screens_ar[i].assigned "+ screens_ar[i].assigned[j].name);
 
            screens_ar[i].assigned[j].scaleX += 0.1;
            screens_ar[i].assigned[j].scaleY += 0.1;
            //screens_ar[i].assigned[j].x = screens_ar[i].assigned[j].x + screens_ar[i].assigned[j].zoomDiffX *  (screens_ar[i].scaleX ) * 0.1 ;
            //screens_ar[i].assigned[j].y = screens_ar[i].assigned[j].y + screens_ar[i].assigned[j].zoomDiffY *  (screens_ar[i].scaleY ) * 0.1;
            screens_ar[i].assigned[j].x = screens_ar[i].assigned[j].x + diffX * 0.1;
            screens_ar[i].assigned[j].y = screens_ar[i].assigned[j].y + diffY * 0.1;
 
            screens_ar[i].assigned[j].publicRedrawMyLines();
 
        }
        screens_ar[i].scaleX += 0.1;
        screens_ar[i].scaleY += 0.1;
        trace("screens_ar[i].scaleY "+screens_ar[i].scaleY);
        trace("screens_ar[i].scaleX "+screens_ar[i].scaleX);
        scaleSize = screens_ar[i].scaleX;
    }
}

Vielen Dank für Hilfe und Anregung im Voraus!

Lg,
hugo