duplicateMovieClip

soulseller

Gesperrt
Guten Morgen allesamt!

Ich bin dabei - beziehungsweise ich google nach einer Möglichkeit - einen Movieclip zu duplizieren, bin auch unter
http://www.actionscripts.org/tutorials/beginner/DOS_Cursor_Text_Effect/

fündig geworden und versuche, mir den Code verständlich zu machen.
so weit so - so gut...ziemlich einleuchtend das alles.

Nun meine Frage:
Wieso wird in der neuen Zeile, die obere gelöscht? Wie man sieht, hab' ich auch schon die removeMovieClip-Anweisung auskommentiert.

schonmal Dank'

tom
 

Anhänge

Hi,

mit duplicateMovieClip wird immer eine Stufe angegeben, in die der neue Clip kopiert wird. Hierzu wird in Deinem Beispiel die Laufvariable "n" verwendet, die bei jeder neuen Zeile wieder auf 1 gesetzt wird. Deshalb werden Clips auf identischen Stufen wieder gelöscht.

Lösung: Nimm als Angabe für die Stufe und den neuen Namen der duplizierten Clips eine zweite Variable "amt", die kontinuierlich inkrementiert wird. Im Anhang findest Du eine modifizierte Version. Beachte: Das Script ist in einer alten Syntax (Flash 4) gehalten und ich weiß nicht, welche Version von Flash Du hast. Ich habe nichts an der Syntax geändert, den Anhang aber als Flash MX gespeichert, in der Hoffnung, dass Du ihn öffnen kannst. Bitte gebe bei allen Beiträgen die von Dir verwendete Flash-Version an.

Gruß
 

Anhänge

Datic hat gesagt.:
Beachte: Das Script ist in einer alten Syntax (Flash 4) gehalten und ich weiß nicht, welche Version von Flash Du hast. Ich habe nichts an der Syntax geändert, den Anhang aber als Flash MX gespeichert, in der Hoffnung, dass Du ihn öffnen kannst. Bitte gebe bei allen Beiträgen die von Dir verwendete Flash-Version an.

Gruß

Hallo Datic,
vielen Dank für deine Hilfe, hört sich einleuchtend an und funktioniert :-) .
Du hast richtig getippt, ich habe Flash MX 2004.

Allerdings ist mir die 3. Zeile noch nicht ganz klar, was wird da gemacht?
die set-Variable verändert "../fontamt:text, was bedeutet das ":"?

PHP:
if (Number(n)<=Number(length)) {
	// ----------------------------------------------
	// type new character
	// ----------------------------------------------
	amt++
	duplicateMovieClip("../original", "font" add amt, amt);

	// folgende Zeile
        set("../font" add amt add ":text", substring(text, n, 1));
        // ein Mysterium

	setProperty("../font" add amt, _x, Number(fontx)+Number((fontwidth*(n-1))));
	setProperty("../font" add amt, _x, getProperty("../cursor", _x)-fontwidth);
	setProperty("../font" add amt, _y, getProperty("../cursor", _y));
	n = Number(n)+1;
	gotoAndPlay(_currentframe-1);
}

Gruss mit ß
 
PHP:
set("../font" add amt add ":text", substring(text, n, 1));
meinst Du diese Zeile? nun ja, "font" add amt referentziert den aktuellen MovieClip (Buchstabe) und dessen Text wird der entsprechende Buchstabe zugewiesen. Eine aktuellere Syntax wäre:
PHP:
eval("_parent.font"+amt).text = text.substr(n, 1);
Ich hatte jetzt eigentlich keine Lust, die ganze Syntax anzupassen (Dann würde ich auch nicht mit duplicateMovieClip, sondern wohl mit attachMovie arbeiten). man sollte sich (zumal wenn man MX2004 hat) möglichst nicht die alte Syntax angewöhnen - vielleicht schreibe ich im Laufe des Abends noch mal eine "modernere" Version. ;)

Gruß
 
Datic hat gesagt.:
PHP:
set("../font" add amt add ":text", substring(text, n, 1));
Eine aktuellere Syntax wäre:
PHP:
eval("_parent.font"+amt).text = text.substr(n, 1);
ja hoppla!
Der aktuelle Syntax ist einfach nur: logisch :eek:
absolut nachvollziehbar, dank dir!

Datic hat gesagt.:
man sollte sich (zumal wenn man MX2004 hat) möglichst nicht die alte Syntax angewöhnen -
recht hast du, nur muss man als Anfänger erst einmal dahinterkommen, dass das ein alter Syntax ist.
Datic hat gesagt.:
vielleicht schreibe ich im Laufe des Abends noch mal eine "modernere" Version. ;)
Gruß
Musst du nicht, hast mir sehr weitergeholfen! ;)

schönen Sonntag noch
 
Hab mir die Datei jetzt nicht angeschaut, aber ich denke, dass geht auch ohne eval:

PHP:
//also statt:
eval("_parent.font"+amt).text = text.substr(n, 1); 
//das hier:
_parent["font" + amt].text = text.substr( n, 1 )
 
Hi,

schon, aber das halte ich für Geschmackssache (auch wenn eval in diesem Fall langsamer arbeiten würde; das Ding ist ja nicht weiter komplex). Außerdem geben sowohl duplicateMovieClip als auch attachMovie eine Referenz auf das Objekt zurück, die sich in diesem Fall prima verwenden lässt. ;)

Gruß
 
Chris Kurt hat gesagt.:
Hab mir die Datei jetzt nicht angeschaut, aber ich denke das geht auch ohne eval:

PHP:
//also statt:
eval("_parent.font"+amt).text = text.substr(n, 1); 
//das hier:
_parent["font" + amt].text = text.substr( n, 1 )

OHNE ist immer gut! ;)
In diesem Falle : Weniger ist mehr.

Danke Euch beiden
 
Zurück