[MX] .duplicateMovieClip() & eval() Problem ...

Irresponder

Erfahrenes Mitglied
hallo,

seit längerer zeit setze ich mich nun mal wieder mit action script auseinander. bei eine abendlichen bastlerei hat sich mir ein problem aufgetan das ich bisher nicht im stande war selbst zu lösen ... es geht darum einfach einen movieclip zu duplizieren, der erstelle movieclip wird daraufhin wieder dupliziert und wird an der erechneten stelle plaziert usw.

ich habe das ganze mit einer schleife und eval realisieren wollen allerdings schlägt irgendwas fehl - keine fehlermeldungen von eval() oder ähnliches, und der code der im trace fenster ausgegeben wird funktioniert sogar (siehe anhang)

ich hab keinen plan was ich falsch mache allerdings wäre ich für hilfe sehr dankbar ;)

PHP:
// script zum eigentlichen duplizieren 
for (i=1;i<=10;i++) {
	previous = 'test'+(i-1);
	current = 'test'+i;
	//eval(previous+".duplicateMovieClip('"+current+"',"+previous+".getDepth()+1);");
	//trace(previous+".duplicateMovieClip('"+current+"',"+previous+".getDepth()+1);");
	as_str += previous+".duplicateMovieClip('"+current+"',"+previous+".getDepth()+1);\n";
	//eval(current+"._x += "+current+"._width + 10;");
	//trace(current+"._x += "+current+"._width + 10;");
	as_str += current+"._x += "+current+"._width + 10;\n"
}
trace(as_str);
eval(as_str);

// generierte code ausgegeben mittels trace
test0.duplicateMovieClip('test1',test0.getDepth()+1);
test1._x += test1._width + 10;
test1.duplicateMovieClip('test2',test1.getDepth()+1);
test2._x += test2._width + 10;
test2.duplicateMovieClip('test3',test2.getDepth()+1);
test3._x += test3._width + 10;
test3.duplicateMovieClip('test4',test3.getDepth()+1);
test4._x += test4._width + 10;
test4.duplicateMovieClip('test5',test4.getDepth()+1);
test5._x += test5._width + 10;
test5.duplicateMovieClip('test6',test5.getDepth()+1);
test6._x += test6._width + 10;
test6.duplicateMovieClip('test7',test6.getDepth()+1);
test7._x += test7._width + 10;
test7.duplicateMovieClip('test8',test7.getDepth()+1);
test8._x += test8._width + 10;
test8.duplicateMovieClip('test9',test8.getDepth()+1);
test9._x += test9._width + 10;
test9.duplicateMovieClip('test10',test9.getDepth()+1);
test10._x += test10._width + 10;
 

Anhänge

  • duplicatemovie.zip
    5,9 KB · Aufrufe: 17
Wenn du dir die Referenz zu eval() durchliest, wirst du auf folgende Zeile(n) stoßen:
Note: The ActionScript eval action is not the same as the JavaScript eval function, and cannot be used to evaluate statements.
Und genau da liegt auch die Antwort zu deiner Frage. :)

Was die Realisierbarkeit dennoch betrifft:
PHP:
for (var i=1; i<=10; i++) {
	var previous = "test" + (i-1);
	var current = "test" + i;
    _root[previous].duplicateMovieClip(current, _root[previous].getDepth()+1);
    _root[current]._x += _root[current]._width + 10;
}
hth,
Geist
 
Remarque : Die ActionScript-Aktion eval unterscheidet sich von der JavaScript-Funktion eval und kann nicht zum Auswerten von Anweisungen eingesetzt werden.

Huch ... danke Geist ;) aber das muss man auch erst einmal verstehen so Blöd wie das geschrieben ist.

noch was zu den ekigen klammern die du benutzt hast ... root[...] wie sieht das aus wenn das ganze in einer mc brauche ? root.mc[...] ? muss ich das absolut angeben, ist ja immer aufwendiger als relativ ...

danke, irresponder ;)
 
hi

auf keinen fall. gib deine pfade relativ ein. dies hat
den nicht zu unterschätzenden nachteil, dass dein code
transportierbar belibt. habe mich schon oft genervt, weil
ich die pfade umschreiben musste beim verschieben von
movieclips.

gruss skyla
 
Danke, allerdings wollte ich wissen wie ich die '[ ]'-syntax relativ halten kann ... (z.b. root['test'+i]._x; ) nur mit eckigen klammern funktionerts nicht ... (gehtnicht!! ['test'+i]._x; ) also wie müsste es dannn aussehen ?

Vielleicht weiß jemand wo ein Beschreibung/Tutorial zu dem Thema ...

danke, irresponder :)
 
Mit den eckigen Klammern greifst du im Prinzip auf Elemente oder Eigenschaften innerhalb eines Objektes (Arrays eingeschlossen) zu - daher auch der Name der eckigen Klammern: Zugriffsoperator.

Dieser muss sich also auf ein Objekt beziehen und kann nicht stand-alone gültig sein. :)

Einfach immer das Objekt davor (und wenn es eben auch "nur" ein this ist), dann die Klammern und dahinein den Index oder Eigenschaftsname - wie du siehst entfällt dabei die Punktsyntax zwischen Objekt und Operator.

Mehr gibt's dazu imho nicht zu sagen. :)

hth,
Geist
 
danke!

danke geist,

langsam wird mir das alles ein wenig klarer, vielen dank an dieser stelle für deine additionale antwort ;)

lg, bis bald,

the.irresponder
 
Zuletzt bearbeitet:

Neue Beiträge

Zurück