Problem mit Tiefenverwaltung bei dublicateMovieClip

-Phantomas-

Mitglied
Hallo, ich bastle gerade eine Anwendung in (AS2), bei der ein MovieClip mehrfach kopiert und zufällig auf der Bühne, in einem begrenzten Bereich platziert werden soll.
Das klappt soweit auch halbwegs, außer dass die neu erstellten Movieclips irgendwann MCs überlagern, die sie nicht überlagern sollen.

1.Problem: duplicatedMovieClips dürfen "bestimmte MCs" nicht überlappen.

Wie kann man z.B. durch...
Code:
menu_mc.swapDepths(1048575)
die menu_mc auf die oberste Tiefe setzen, ohne dass was anderes eventuell überschrieben wird?

2.Problem: Die MCs überlappen stellenweise den Bühnenrand.

Frage: Wie kann man den Bereich in den sie per random platziert werden begrenzen?


Mein bisheriger Code:
Code:
...
zettel_mc.duplicateMovieClip("zettel_mc"+i, (-16382) +i);
					objekt = eval("zettel_mc" + i);
					objekt._x = Math.random(300)*650;
		                        objekt._y = Math.random(300)*300;
...
Hier wird irgendwann eine schon vergebene "Tiefe" durch einen "zettel_mc" ersetzt,
was natürlich zu Fehlern führt. Kann man irgendwie über "getNextHighestDepth()" ein Überschreiben umgehen, nur wie?


Wäre super wenn mir jemand einen Tipp geben könnte.

Gruß
-Phanotmas-
 
Tag,
wieviele MCs werden es denn? Und wie viele sollen überlappt werden? Man könnte eine virtuelle Z-Koordinaten einrichten, die für die Tiefe steht. Generell würde getNextHighestDepth() die MCs immer 'oben drauf' packen. Wie wird im letzten Codebeispiel das i definiert?

Einen random-Bereich begrenzen kann man mit x + (random * y), wobei x = untere Grenze und (x+y) = obere Grenze.
 
Es sind maximal 5 MCs die nicht überlappt werden dürfen.
Alles andere darf von den duplicatedMCs verdeckt aber nicht überschrieben werden.


i wird definiert durch:
Code:
var anzData:Number = Number(this.counter);
			for (var i:Number = 0; i<anzData; i++) 
                        {...}
"i" kann recht groß werden und benötigt dem entsprechend viele verschiedene Tiefen.


Das mit dem ramdom verstehe ich nicht so ganz... :(
Wie bekomme ich es hin, dass die MCs nicht über den Rand lappen?
Filmgröße"1024*400"

Danke für die schnelle Hilfe...

LG
-Phantomas-
 
Zuletzt bearbeitet:
Einen random-Bereich begrenzen kann man mit x + (random * y), wobei x = untere Grenze und (x+y) = obere Grenze.
Wenn du also eine Zahl zwischen 300 und 700 haben willst machst du 300 + (Math.random() * 400). Durch diese Zahlenbegrenzungen kannst du ja eingrenzen, wo die MCs bleiben. Musst halt bei der rechten und unteren Grenze darauf achten, die Größe des MCs mit einzuberechnen - denn die Koordinaten sind stets (oder eher in der Regel) die der oberen linken Ecke.

Magst du bzgl. des anderen Problems mal die *.fla posten, dann können wir uns das etwas gezielter angucken. Was i ist weiß man auch anch deiner Antwort z.B. nicht, weil die ja durch anzData begrenzt wird. Und das wird durch this.counter bestimmt. Als Außenstehender nicht wirklich transparent :)
 
Das mit dem Math.random hat schon mal super geklappt :)

Dank Dir!

Wegen des Tiefenproblems durch "duplicate.MovieClip" schick ich Dir mal die .fla und nen Testlink.

Gibt es vielleicht die Möglichkeit vor dem duplizieren, alle vorhandenen "Tiefen" automatisch zu erkennen und zu sortieren?


Ziel: duplizierte MCs so niedrig wie möglich setzen und dabei keine Werte zu überschreiben.


LG
-Phantomas-
 
Habe die fla erhalten. Welcher MC soll denn da welchen überlappen? Sieht für mich so schon ziemlich gewollt aus, sind halt Post-Its, die sich überlappen.

Wie viele Post-Its sollen denn da mal angezeigt werden? Im Code steht was von:
Code:
zettel_mc.duplicateMovieClip("zettel_mc"+i,-15000+i);//zettel_mc duplizieren und auf Tiefe -15000 (-16384 bis 1048575)setzten
Das sind ja ca. 1 Million...? Wieso? So viele Post-Its?
 
Da das ganze eine Art Gästebuch werden soll, sollen mehr oder weniger unbegrenzt viele Post-Its auf der Bühne platziert werden.

Die Post-Its sollen sich selber überlagern, aber nicht die MCs:

zettelgrsend_mc
zettelgr_mc
backsend_mc
stift_mc
tooltip


1. Problem: Als ich die MCs via "swapDepth" hoch gesetzt habe, funktionierte die Animation nicht mehr richtig.

2. Problem: die Duplikate von "zettel_mc" überschreiben irgendwann vorhandene "Tiefen"
 
Wir haben inzwischen per chat klären können, dass die richige Wahl einfach überall getNextHighestDepth() war.

Das einrichten von so übertrieben hohen Tiefenwerten (z.B. -15000) ist nicht wirklich Performancefreundlich und nicht wirklich 'gutes Programmieren'. Man sollte sich also garnicht erst dran gewöhnen - zumal es in AS3 nicht mehr möglich ist. Da dürfen keine Lücken in der Liste der Tiefenwerte sein.
 

Neue Beiträge

Zurück