duplicateMovieClip-Problem

torty

Grünschnabel
Hallo,

ich habe folgendes getippert:

---------------------------------------------------------------
snr = 1;

while (snr<4))
{
duplicateMovieClip("_root.i_box", "_root.i_box_klon"+snr, 1);
_root["_root.i_box_klon"+snr]._x=posxy[snr-1][0];
_root["_root.i_box_klon"+snr]._y=posxy[snr-1][1];

trace("Slot: "+snr+" Name: i_box_klon"+snr+
" Pos: _x= "+_root["_root.i_box_klon"+snr]._x+
" _y: "+_root["_root.i_box_klon"+snr]._y);

snr++;
}
----------------------------------------------------------------

_root.i_box ist ein rotes Viereck (Movieclip) welches außerhalb
des Flash's liegt. Von diesem will ich 3 Klone erzeugen und diese
dann an die x/y-Position verschieben die im Array posxy steht.

Er klont mir die i_box-Instanz, aber der Klon bleibt dann nicht
dort sondern wird wahrscheinlich durch den nachfolgend erzeugten
Klon gelöscht oder was auch immer. Fakt ist ich seh danach nur
einen Klone. In diesem Fall den i_box_klon3. Der sitzt dann auch
an der richtigen Stelle.

Das trace() hab ich eingefügt um zu sehen ob die Schritte snr=1
und snr=2 auch richtig verarbeitet werden.
Die Ausgabe gibt mir für alle 3 Klone die zu diesem Zeitpunkt
relevanten Informationen wieder. Danach befanden sich zum Zeit-
punkt des trace-Befehls die Klone 1 & 2 an den jeweils richtigen
Positionen.

Auch ein Debugg-Durchgang zeigte mir dies dann auch. Klon1 wird
erzeugt und richtig positioniert. Sobald dann aber der Klon2 er-
zeugt wird, verschwindet der Klon1. Respektive passiert dies
dann auch mit Klon2 bei der Erzeugung von Klon3.

Ich hab hier schon meine Bücher gewälzt, aber nichts gefunden was
mir dies erklären könnte.

Ich hoffe ich hab nicht zu wirr / kompliziert geschrieben und mal
schauen ob euch was dazu einfällt.
 
PHP:
snr = 1;                        // Zähler
myX = new Array(10, 140, 60);   // wie du dein array definiert hast 
myY = new Array(10, 140, 60);   // wusste ich ja nicht..
while (snr<4) {

    duplicateMovieClip(_root.i_box, "i_box_klon"+snr, snr); 

                              //das snr am Ende is das wichtigste !

    this["i_box_klon" add snr]._y = myY[snr-1];
    this["i_box_klon" add snr]._x = myX[snr-1];

                           //deine _root[_root.mc...] syntax verwirrt

	trace(this["i_box_klon" add snr]._x);
	trace(this["i_box_klon" add snr]._y);
   
 snr++;                   //Schleifenende
                           

}

is der korrekte code, es ist zwar ein bisschen unlogisch, das
sich mc`s trotz eindeutigem identifier nur einmal innerhalb einer Ebene duplizieren lassen, aber es is nun mal so (liegt wohl am "_level0.object.modelling :-) " von flash).
Das i am Ende des duplicate mc is der entscheidende Fehler gewesen, dein Syntax ansonsten zumindest chaotisch zu nennen.;)

klasse trace übrigens....:hehe!!:
 
Zuletzt bearbeitet:
"is der korrekte code, es ist zwar ein bisschen unlogisch, das
sich mc`s trotz eindeutigem identifier nur einmal innerhalb einer Ebene duplizieren lassen, aber es is nun mal so "

was bedeutet das?! ich wollte/müsste von dem Objekt/Movieclip
aber bis zu 5 Klone gleichzeitig anzeigen lassen.
In dem Buch welches ich erwähnt habe wurde ein Sternenfeld
simuliert in dem aus der Bibliothek MovieClips mit attachMovie
geklont und dann entsprechend bewegt wurden. Dies erweckt bei mir
den Eindruck, dass es durchaus viele Klone gleichzeitig geben kann.

Danke für deine Antwort, aber könntest du deine Aussage noch ein
wenig präzisieren? Thx.
 
Du kannst, Mensch !

ich hab nur gesagt das in einem _level nicht mehr als eine copy sein kann, warum auch immer.
PHP:
//war ein Fehlschluss s.u.

Indem du in deinem duplicate Movie Argument schreibst:
PHP:
duplicateMovieClip(_root.i_box, "i_box_klon"+snr, snr);

anstatt
PHP:
duplicateMovieClip(_root.i_box, "i_box_klon"+snr, 1);

sagst du flash das er die kopierten mc´s in das jeweils snr´te Level(_depth, danke Geist) deines Films legen soll.
 
Zuletzt bearbeitet:
Es wird die Tiefe des MCs bei den Methoden attachMovie, duplicateMovieClip() und createEmptyMovieClip() als Argument übergeben, nicht das Level!

_depth statt _level heißt hier also die Devise. :)

Geist,
der da wo doch endlich die 2000 vollbracht hat
 
@basileus:
deine Version hat funktioniert. das Problem war wohl, dass der
Begriff "Tiefe" in meinem sonst sehr guten Buch nicht eindeutig
erklärt wurde. Da ich nun statt Tiefe 1 die Variable snr ver-
wendet habe gehts auch.

Zum Wirrwarr in meinem Code lässt sich sagen, dass dem wohl so sein
wird, aber das resultiert nur daraus dass dies halt mein erstes
Projekt ist und ich auch noch auf der Suche nach einer logischen,
klar strukturierten Schreibweise bin. Mensch!

Ansonsten Danke für eure Antworten :)
 

Neue Beiträge

Zurück