| |||||||
Du magst keine Werbung? Wir auch nicht!
Einfach registrieren und die Werbung ist weg. Diese Nachricht sehen nur nicht registrierte Nutzer.
![]() |
| | LinkBack | Themen-Optionen | Ansicht |
| | #1 (permalink) |
| Neuer User Registriert seit: May 2003 Ort: Aschersleben
Beiträge: 80
| nach "duplicate mc" Instanzen bewegen
Hallo mal wieder, also ich bin gerade froh ne for Schleife begriffen zu haben, von daher die einfachen Fragen: Ich möchte einfach ein paar Objekte bspw. von links nach rechts zufällig über den Bildschirm fliegen lassen. Habe Instanz 10x dupliziert mit: for(i=1;i<10;i++) { duplicateMovieClip("_root.test", "test" + i, i); setProperty(_root["test" + i], _x, random(120)+20); } Mit "Set Property" wie hier im Bsp. kann man ja gut Eigenschaften vergeben. Aber wie bekomme ich da ne Bewegung rein. also sowas wie "_root.test1._x = _x +1;" 2. Frage Ich hab mit ner if Abfrage in der for Schleife versucht auf nen anderen Frame zu springen, also bspw: if (i==9) {gotoAndPlay... usw. Das geht aber irgendwie nicht. Wahrscheinlich wieder was ganz simples. Schonmal vielen Dank für die Hilfe. Es wäre schön wenn ihr nicht einfach nur nen Script hinschreibt, sondern es auch ein wenig erklärt. Dann kann ichs vielleicht auch mal irgendwann;-) Gruß Andreas Geändert von andbal (23-11-2005 um 23:51 Uhr) |
| | |
| | #2 (permalink) |
| °.oO°O.o°.oO.o°O Registriert seit: Jun 2005 Ort: CH
Beiträge: 1.490
|
Ok... hier erstmal der Code... ![]() Code: for(i=1;i<10;i++)
{
duplicateMovieClip("test", "test" + i, i);
_root["test" + i]._x = random(120)+20;
_root["test"+i].onEnterFrame = function() {
this._x += 3;
}
} Die Schleife dürfte dir klar sein. Das "_root" beim duplicate kannst du weglassen, die Instanz heisst ja sicherlich einfach nur "test"!? Dann kannst du anstatt setProperty auch ganz einfach den x-Wert direkt verändern, indem du ihn ansprichst... dann legst du einfach zusätzlich auf jeden MovieClip noch ein ClipEvent Namens "onEnterFrame" (auf MC: on(EnterFrame) ), das ständig ausgeführt wird und sich selbst immer um 3 weiterschiebt, also weiterhin auf seinen x-Wert zugreift.
__________________ There is no way to happiness, happiness is the way! - Buddha |
| | |
| | #3 (permalink) |
| Neuer User Registriert seit: May 2003 Ort: Aschersleben
Beiträge: 80
|
Hi Bamboocha, vielen Dank, das ist erstmal genau das was ich wollte. Die onEnterframe funktion ist also ungefähr das gleiche, als wenn ich das in einen mc auf der Bühne schreiben würde, oder? Jetzt sollen die mc's irgendwann wieder auf die Anfangs xpos zurückspringen. Wollte anfangs_x auslesen, dann immer Abstand vergleichen und wenn bestimmter Abstand erreicht ist, sollen sie zurückspringen. Ich fang mal an mit testen. Mal sehen ob's was wird. |
| | |
| | #4 (permalink) |
| Neuer User Registriert seit: May 2003 Ort: Aschersleben
Beiträge: 80
|
Ok, ich bin's gleich nochmal. Wieder erwarten hat das mit dem zurückspringen sofort funktioniert. Scheinbar lerne ich hier dochwas. Jetzt möchte ich nur noch, dass die mc's nach jedem zurückspringen ihre Eigenschaften zufällig verändern. Ich hab schon versucht das Skript umzubauen. Aber kann man in eine onEnterFrame Funktion eine weitere onEnterFrame Funktion verschachteln. for(i=1;i<10;i++) { xa = this._x; duplicateMovieClip("test", "test" + i, i); _root["test" + i]._x = random(120)+20; _root["test" + i]._y = random(120)+20; _root["test"+i].onEnterFrame = function() { //für die x Bewegung this._x += 2; xd = this._x - xa; if (xd >=200) { this._x = this._x - xd; //Für die Veränderung der Größe nach jedem zurückspringen _root["test"+i].onEnterFrame = function() { this._width = random(30); } } } } Denn laufen tut es zwar aber die Größe bleibt gleich. |
| | |
| | #5 (permalink) |
| °.oO°O.o°.oO.o°O Registriert seit: Jun 2005 Ort: CH
Beiträge: 1.490
|
Hi... ich nochmal ![]() Das onEnterFrame ist das selbe, wie wenn du auf den MC "onClipEvent(EnterFrame) [...]" schreiben würdest... Also das mit dem Zurückspringen... du weisst schon, dass alle Objekte den selben Anfangspunkt xa nehmen (der zudem gesetzt wird, bevor this definiert ist!), da dieser bei jedem Ausführen der Schleife neu gesetzt wird und zum Schluss einfach den Wert des letzten Objektes besitzt. Du brauchst keine verschachtelten onEnterFrame's! Du kannst ja das Verändern der Grösse, bzw. Eigenschaften beim Zurücksetzen ausführen lassen, soll ja nur dann geschehen! Ausserdem würde ich nicht unbedingt einen Abstand zum Starpunkt wählen (ausser du willst das wirklich), sondern fragst einfach ab, wann das Objekt ausserhalb der Bühne ist (this._x > Stage.width) und setze es dann zurück. Also ich denke, folgender Code dürfte in etwa das erfüllen, was du suchst: Code: for(i=1;i<10;i++)
{
duplicateMovieClip("test", "test" + i, i);
this["test" + i]._x = random(120)+20;
//Hier wird für jedes Objekt eine eigene Variable mit dem variabel gesetzten
//Startwert gesetzt. Beachten: Zuweisung kann erst nach der Definition erfolgen!
this["start"+i] = this._x;
this["test" + i]._y = random(120)+20;
this["test"+i].onEnterFrame = function()
{
//für die x Bewegung
this._x += 2;
xd = this._x - this._parent["start"+this._name.substr(4, 1)];
if (xd >=200)
{
this._x = random(120)+20;
this._width = random(30);
}
}
} Und das ist der Code, wenn du es vom Rand der Bühne abhängig machen willst (ist ein bisschen weniger Code): Code: for (i=1; i<10; i++) {
duplicateMovieClip("test", "test"+i, i);
this["test"+i]._x = random(120)+20;
this["test"+i]._y = random(120)+20;
this["test"+i].onEnterFrame = function() {
//für die x Bewegung
this._x += 2;
if (this._x>=Stage.width) {
this._x = random(120)+20;
this._width = random(30);
}
};
}
__________________ There is no way to happiness, happiness is the way! - Buddha |
| | |
| | #6 (permalink) |
| Neuer User Registriert seit: Nov 2005 Ort: Aschersleben
Beiträge: 32
|
Hi Bamboocha, ich bin noch der gleiche, aber mein Accout geht grad nicht. Ich hatte meine email Adresse geändert, dannach ging nichts mehr. Ich kann mich zwar noch anmelden, kann aber nicht antworten gar nichts. Na jedefalls hab ich jetzt erstmal vorübergehend meiner Freundin nen Acount gemacht;-) Ersmal vielen Dank für deine Tips. 1. Ich möchte den mc nur hinter einer kleinen Maske ablaufen lassen, also nicht über die ganze Bühne. Trotzdem ist das mit dem "Stage" gut zu wissen. 2. Das ich den 2. onEnterframe weglassen kann hab ich dann auch gemerkt, ich muss ja einfach nur die neuen Eigenschaften hinschreiben. 3.Dein erster Ansatz sieht auch sehr spannend aus nur werd ich aus Deinen eingefügten Zeilen leider nicht ganz schlau. Mit "this["start"+i] = this._x;" leißt Du die Startposition aus. Aber aus der Distanzberechnug werd ich nich schlau. xd = this._x - this.["start"+this._name.substr(4, 1)]; Danke, hier lern ich was |
| | |
| | #7 (permalink) |
| °.oO°O.o°.oO.o°O Registriert seit: Jun 2005 Ort: CH
Beiträge: 1.490
|
Hi brandi (halt... ^^) 1. Ok... wollte dich nur darauf hinweisen, hab mir aber schon gedacht, dass du es entsprechend so gewollt hast. 2. ... ![]() 3. ACHTUNG! Bitte das ganze richtig lesen und übernehmen! es sollte nicht so heissen: Code: xd = this._x - this.["start"+this._name.substr(4, 1)]; Code: xd = this._x - this._parent["start"+this._name.substr(4, 1)]; mit Code: this["start"+i] = this._x; Um nun den Abstand zu berechnen, brauchst du die momentane Position des Elementes, sowie dessen Startposition. Code: this._parent["start"+this._name.substr(4, 1)]; Genauer: Code: this._parent Wenn du auf eine Variable, bzw. deren Name dynamisch zugreifen möchtest (also den Variablenname sozusagen dynamisch erstellen willst), musst du das mit geschweiften Klammern tun. Dazu zu wissen gibt es, dass alle Elemente auf einer Ebene wie ein Array ansprechbar sind. Bsp: Hast du einen MovieClip (MCmain) mit drei weiteren MC's (MCbsp1, MCbsp2 und MCbsp3) darin. Alle drei MovieClips sind nun über ein Array ansprechbar. Das heisst, alternativ zu Code: MCmain.MCbsp1.irgendNeFunktion() Code: MCmain["MCbsp1"].irgendNeFunktion() Code: var bspclip = "MCbsp1"; MCmain[bspclip].irgendNeFunktion() Also, mit diesem Wissen gehen wir jetzt weiter. Wir wissen, dass es auf "_root" die Variable hat, welche den Startwert gespeichert hat ("Start1", "Start2", ... "Start9"). Um nun auf diese zugreifen zu können, wenden wir das dynamische zugreifen über die Array-Funktion der Eben zu. Da das Start eh immer gleich bleibt, brauchen wir nur noch die dazugehörende Zahl. Da Element 1 seine Startkoordinaten in "Start1" hat (etc.), können wir hier mit dem Namen des Elementes arbeiten, da ja die entsprechende Zahl im Namen enthalten ist. Am Anfang erstellen wir ja die 9 Elemente mit folgendem Code: Code: duplicateMovieClip("test", "test" + i, i); Code: this._name.substr(4, 1) Code: this._parent["start"+this._name.substr(4, 1)]; So, das war die ganze Hexerei. Ich hoffe, du konntest was lernen und deinen Wissensdurst ein bisschen stillen. Einfach weiter fragen bei Unklarheiten. mfg Griz
__________________ There is no way to happiness, happiness is the way! - Buddha |
| | |
![]() |
| Lesezeichen |
| Themen-Optionen | |
| Ansicht | |
| |