Zurück   Flashforum > Flash > ActionScript > ActionScript 1

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 05-05-2004, 18:22   #1 (permalink)
nah dran
 
Benutzerbild von -Panda-
 
Registriert seit: Sep 2002
Ort: Karlsruhe
Beiträge: 147
Question for-in-Schleife und onEnterFrame

Hallo ihr lieben,

ich habe ein kleines Problem, und zwar möchte ich alle Movieclips, die in einem bestimmten Pfad liegen, ansprechen und nacheinander verändern. Mein Ansatz war folgender, aber auf diese Weise wird das onEnterFrame wird erst beim letzten Movieclip ausgeführt.

ActionScript:
  1. for (var ele in _root) {
  2.     trace(_root[ele]);
  3.     this.onEnterFrame = function() {
  4.         _root[ele]._x += 550;
  5.         trace(_root[ele]+"._x = "+_root[ele]._x);
  6.         delete this.onEnterFrame;
  7.     };
  8. }

Klar könnte ich auch erstmal alle Movieclips in ein Array schreiben und bei jedem onEnterFrame eins hochzählen, aber weiß vielleicht jemand eine elegantere Lösung, bei der man auch ohne Array auskommt?

Thanx,
Panda
-Panda- ist offline   Mit Zitat antworten
Alt 05-05-2004, 18:25   #2 (permalink)
Flash & TYPO3
 
Registriert seit: Oct 2003
Ort: Bayern
Beiträge: 2.700
Für was brauchst denn hier überhaupt ein oEF? Du verschiebst dem MC genau einmal - dann löscht du die oEf schon wieder! kannste dir doch dann gleich sparen!? Ansonsten in setInterval(); ädern!
__________________
Mediendesign-Student
johanness ist offline   Mit Zitat antworten
Alt 05-05-2004, 18:31   #3 (permalink)
nah dran
 
Benutzerbild von -Panda-
 
Registriert seit: Sep 2002
Ort: Karlsruhe
Beiträge: 147
Stimmt, hast recht, das macht keinen Sinn

Ich wollte halt alle Elemente, die sich im Pfad, also z.B. _root befinden, nacheinander verschieben/erscheinen lassen... was auch immer, ohne dabei alle Elemente in ein Array schreiben zu müssen.
-Panda- ist offline   Mit Zitat antworten
Alt 05-05-2004, 19:01   #4 (permalink)
nah dran
 
Benutzerbild von -Panda-
 
Registriert seit: Sep 2002
Ort: Karlsruhe
Beiträge: 147
Sorry, ich komm da grad auch mit setInterval nicht weiter.

Im Grunde gehts mir darum, eine for-in-Schleife in bestimmten Zeitabschnitten zu durchlaufen, also so zu sagen eine Verzögerung einzubauen, bis die Schleife das nächste durchlaufen wird. Wahrscheinlich ist der Weg mit setInterval schon der richtige, ich kriegs aber gerade nicht gebacken. Kann mir jemand auf die Sprünge helfen??
-Panda- ist offline   Mit Zitat antworten
Alt 05-05-2004, 21:42   #5 (permalink)
Flash & TYPO3
 
Registriert seit: Oct 2003
Ort: Bayern
Beiträge: 2.700
Erklär mal genau wie sich die Objekte bewegen sollen (und wie sie heißen und liegen).
__________________
Mediendesign-Student
johanness ist offline   Mit Zitat antworten
Alt 05-05-2004, 23:03   #6 (permalink)
querdenker
 
Benutzerbild von kelor
 
Registriert seit: Jun 2001
Ort: formel1-stadt hockenheim
Beiträge: 4.731
dein aufbau oben ist falsch herum...ist dir nicht aufgefallen, nicht...?!

nicht so:
ActionScript:
  1. for (var ele in _root) {
  2.         trace(_root[ele]);
  3.         this.onEnterFrame = function() {
  4.                 _root[ele]._x += 550;
  5.                 trace(_root[ele]+"._x = "+_root[ele]._x);
  6.                 delete this.onEnterFrame;
  7.         };
  8. }


sondern so herum wird ein schuh draus...
ActionScript:
  1. this.onEnterFrame = function() {
  2.      for (var ele in _root) {
  3.            trace(_root[ele]);
  4.            _root[ele]._x += 550;
  5.           trace(_root[ele]+"._x = "+_root[ele]._x);
  6.           delete this.onEnterFrame;
  7.     };
  8. }




jetzt mal davobn ab, dass johannes natürlich recht hat, wenn er sagt, dass ein oEF für´n popo iss, wenn er eh nur einmal angesprungen wird...

aber du hast den enterframe in die for-schleife gesteckt...
statt anders rum...

zu allem überfluss hast du auch nur einen enterfram, der innerhalb der schleife sofort überschreiben wird und somit nur den letzten der brüder verändert...





greetz

kelor
kelor ist offline   Mit Zitat antworten
Alt 05-05-2004, 23:04   #7 (permalink)
nah dran
 
Benutzerbild von -Panda-
 
Registriert seit: Sep 2002
Ort: Karlsruhe
Beiträge: 147
Ich möchte eigentlich eine allgemeine Routine schreiben ohne Hinblick auf die Namen der Objekte oder dem was sie machen sollen. Ich versuchs nochmal etwas klarer zu formulieren:

Ich habe einen Container-MC und in dem befindet sich eine Anzahl an Objekten (MCs), die vorher dynamisch erzeugt wurden. Diese sollen dann der Reihe nach eine Aktion ausführen, z.B. sich zeitlich versetzt (z.B. jeweils nach einem Frame) nacheinander einblenden.

Wenn ich die Objekte beim Erzeugen in ein Array schreibe, kann ich das Problem mit onEnterFrame und einer if-Abfrage ja recht einfach lösen, aber ohne Array mit einer for-in-Schleife, die die Objekte ausliest, die sich im Container-MC befinden und zeitlich versetzt anspricht, klappt nicht. Vielleicht gehts auch einfach gar nicht...
-Panda- ist offline   Mit Zitat antworten
Alt 05-05-2004, 23:06   #8 (permalink)
nah dran
 
Benutzerbild von -Panda-
 
Registriert seit: Sep 2002
Ort: Karlsruhe
Beiträge: 147
sorry kelor, jetzt hab ich deinen Beitrag übersehen... sehs mir gleich mal an!

...


hmm, das Problem ist ja, (das hatte ich so rum ja auch schon probiert), daß er jetzt alle Objekte auf einen Schlag ändert und nicht zeitlich versetzt. Ich bräuchte also irgendwas, was die for-in-Schleife "langsamer" ablaufen läßt.

Trotzdem danke!

Geändert von Pandabärchen (05-05-2004 um 23:11 Uhr)
-Panda- ist offline   Mit Zitat antworten
Alt 05-05-2004, 23:13   #9 (permalink)
querdenker
 
Benutzerbild von kelor
 
Registriert seit: Jun 2001
Ort: formel1-stadt hockenheim
Beiträge: 4.731
achso..du willst die objekte zeitlich nacheinander anspringen...aber warum willst du das eigenlich partout ohne array erledigen?

aber davon mal ab...auch das geht...

greetz

kelor
kelor ist offline   Mit Zitat antworten
Alt 05-05-2004, 23:15   #10 (permalink)
nah dran
 
Benutzerbild von -Panda-
 
Registriert seit: Sep 2002
Ort: Karlsruhe
Beiträge: 147
Und wie ?? Lass mal hören!!!
-Panda- ist offline   Mit Zitat antworten
Alt 05-05-2004, 23:23   #11 (permalink)
Neuer User
 
Registriert seit: Apr 2004
Ort: Kalifornien
Beiträge: 239
i=0;
myInterval=new Object();
myInterval.interval=function(){
_root.innerMc["neuMc"+i].Funktion hier....
i++;
if(i>leztesClip){
clearInterval(timer);
}
}
timer=setInterval(myInterval,"interval",2000);

Dies macht was mit deinen mcs alle 2 Sekunden.
__________________
Es war schon immer etwas teurer, einen guten Flash Film zu machen.
www.flashscript.biz
cancerinform ist offline   Mit Zitat antworten
Alt 05-05-2004, 23:24   #12 (permalink)
querdenker
 
Benutzerbild von kelor
 
Registriert seit: Jun 2001
Ort: formel1-stadt hockenheim
Beiträge: 4.731
ActionScript:
  1. myFPS = 25; // <--- deine film-fps eintragen
  2.  
  3. delay = Math.round(1000/myFPS)// delay ist nun genau ein frame!
  4.  
  5. myMC_arr = []; // array zum pushen
  6.  
  7. num=0;
  8.  
  9. for (var ele in _root) {
  10.                trace(_root[ele]);
  11.                myMC_arr.push(_root[ele]);
  12. }
  13.  
  14. function setElems(){
  15.             if((_root.num) == (_root.myMC_arr.length-1)) clearInterVal(_root.myInt);
  16.              _root.myMC_arr[_root.num]._x +=550;
  17.             _root.num+=1;
  18.  
  19. }
  20.  
  21.  
  22. myInt = setInterval(setElems,delay);


meintest du sowas...?


greetz

kelor
kelor ist offline   Mit Zitat antworten
Alt 06-05-2004, 00:06   #13 (permalink)
nah dran
 
Benutzerbild von -Panda-
 
Registriert seit: Sep 2002
Ort: Karlsruhe
Beiträge: 147
Ja, das geht schon in die Richtung. Aber ich hab mich halt gefragt, ob es nicht irgend was ganz simples gibt, so was sie...

ActionScript:
  1. for (var ele in _root) {
  2.     _root[ele]._x += 550;
  3.     updateAfterEvent;
  4. }

Klappt so natürlich auch nicht.
Trotzdem vielen Dank für die Anregungen!!
-Panda- ist offline   Mit Zitat antworten
Alt 06-05-2004, 00:32   #14 (permalink)
querdenker
 
Benutzerbild von kelor
 
Registriert seit: Jun 2001
Ort: formel1-stadt hockenheim
Beiträge: 4.731
ActionScript:
  1. num=1;
  2.  
  3. for (var ele in _root) {
  4.         var delay = 1000*num;
  5.         _root['intval'+num] = setInterval(function(_root[ele],num){var mc = arguments[0]; mc._x += 550; clearInterval(_root['intval'+(arguments[1])]); delete _root['intval'+(arguments[1])];}, delay);
  6.        num++;
  7. }


so ?



sollte gehen...hab´s aus´m kopp getippt und hoffe, das nirgendwo ein komma fehlt...*g*


greetz

kelor
kelor ist offline   Mit Zitat antworten
Alt 06-05-2004, 17:30   #15 (permalink)
nah dran
 
Benutzerbild von -Panda-
 
Registriert seit: Sep 2002
Ort: Karlsruhe
Beiträge: 147
Irgendwas passt da nicht, glaube ihm schmeckt der Parameter _root[ele] nicht. Naja, hab jedenfalls nochmal mit deinem Ansatz rumgebastelt, aber im Endeffekt habe ich dabei das selbe Problem wie in meinem allerersten Ansatz mit onEnterFrame, nämlich dass das oEF bzw. setInterval nur für das letzte Element ausgeführt wird. Ich versteh zwar nicht, warum das so ist, aber ich gebe mich jetzt so langsam geschlagen. Denke es ist einfach der falsche Ansatz.

Thanx,
Panda
-Panda- ist offline   Mit Zitat antworten
Antwort

Lesezeichen

Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind an
Pingbacks sind an
Refbacks sind an



Alle Zeitangaben in WEZ +1. Es ist jetzt 04:16 Uhr.

Domains, Webhosting & Vserver von Host Europe
Unterstützt das Flashforum!
Adobe User Group


Copyright ©1999 – 2012 Marc Thiele