Tobias Menzel
Erfahrenes Mitglied
Hallo,
mit dieser Funktion kann die Tiefensortierung einer Anzahl MovieClips indirekt festgelegt werden. So ist es z.B. möglich, bei dynamischen Größenänderungen größere Clips in den Vordergrund zu holen oder die Stapelungsreihenfolge in einer Pseudo-isometrischen Darstellung festzulegen.
Die betreffenden MovieClips werden der Methode in einem Array übergeben; die Tiefenebenen werden anhand der Position im Array festgelegt:
Da die Position im Array entscheidend ist, muss das Array ggf. nach einem bestimmten Kriterium sortiert werden - dazu kann z.B. die sort-Methode in Verbindung mit einer Vergleichsfunktion dienen:
Grüße,
Tobi
.
mit dieser Funktion kann die Tiefensortierung einer Anzahl MovieClips indirekt festgelegt werden. So ist es z.B. möglich, bei dynamischen Größenänderungen größere Clips in den Vordergrund zu holen oder die Stapelungsreihenfolge in einer Pseudo-isometrischen Darstellung festzulegen.
Die betreffenden MovieClips werden der Methode in einem Array übergeben; die Tiefenebenen werden anhand der Position im Array festgelegt:
Code:
function sortDepths(siblings) {
function siblSorted(arr) {
var a = arr;
var ok = true;
for (var i=0; i<a.length - 1; i++) {
if (a[i].getDepth() > a[i + 1].getDepth()) {
ok = false;
break;
}
}
return ok;
}
var d = 0;
while (!siblSorted(siblings) && d < siblings.length * 2) {
d ++;
for (var i=0; i<siblings.length - 1; i++) {
var f1 = siblings[i];
var f2 = siblings[i + 1];
if (f1.getDepth() > f2.getDepth()) {
f1.swapDepths(f2);
}
}
}
}
Da die Position im Array entscheidend ist, muss das Array ggf. nach einem bestimmten Kriterium sortiert werden - dazu kann z.B. die sort-Methode in Verbindung mit einer Vergleichsfunktion dienen:
Code:
// 4 MovieClips anhand ihrer vertikalen Position (_y-Eigenschaft) in der Tiefe anordnen:
var clips = new Array(mc1, mc2, mc3, mc4); // Clips in einem Array aufnehmen
clips.sort(byY); // Array nach y-Position sortieren
sortDepths(clips); // Tiefenebenen festlegen
function byY(a, b) { // Vergleichsfunktion
if (a._y > b._y) {
return 1;
} else if (a._y < b._y) {
return -1;
} else {
return 0;
}
}
Grüße,
Tobi
.