Zurück   Flashforum > Flash > ActionScript > ActionScript 1

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 17-02-2005, 23:06   #1 (permalink)
Neuer User
 
Benutzerbild von BigLebowski
 
Registriert seit: May 2004
Beiträge: 25
onEnterFrame innerhalb for-schleife

hallo zusammen,
angenommen ich möchte in der hauptzeitleiste im ersten frame für mehrere mc's eine onEnterFrame-funktion vergeben. die mc's nenn ich mal der einfachheitshalber mc0, mc1, ... , mcn. wenn ich die onEnterFrame-funktion nun innerhalb einer for-schleife aufrufe, so ist der wert des schleifen-zählers "i" innerhalb jedes mc.onEnterFrames gleich dem "i"-wert der durchgelaufenen schleife, da die for-schleife ja schon vorm ersten framewechsel komplett berechnet wurde.
ich habe das ganze mal vereinfacht dargstellt:

Code:
for(i=0;i<mcArray.length;i++) {
	_root["mc"+i].onEnterFrame = function() 
	{
		if(this._x < Stage.width)
		{
			this._x = this._x+i;
		}
	}	
}
in diesem fall bewegen sich alle mc's gleichschnell, da die zählervariable "i" immer dem abbruch-wert der schleife entspricht, in diesem fall "mcArray.length".
wie kann ich das umgehen? hoffe ihr versteht was ich meine, ist gar nicht so einfach zu erklären...
__________________
COP: And was there anything of value in the car? DUDE: Huh? Oh. Yeah. Tape deck. Couple of Creedence tapes. And there was a, uh. . . my briefcase. COP: In the briefcase? DUDE: Papers. Just papers. You know, my papers. Business papers. COP: And what do you do, sir? DUDE: I'm unemployed.
BigLebowski ist offline   Mit Zitat antworten
Alt 17-02-2005, 23:19   #2 (permalink)
agedoubleju
Gast
 
Beiträge: n/a
Wenn du etwas "hintereinander" durchführen willst, musst du deine Events auch "hintereinander" setzen und nicht quasi-parallel. D.h. der Folge-Event darf erst aufgerufen werden, wenn der laufende Event beendet wurde oder eine Abbruchbedingung gesetzt wurde. Dazu musst du auch noch eine Abbruchbedingung für den laufenden Event setzen. Kleines (ungetestetes) Beispiel:
ActionScript:
  1. function fkt(i){
  2.     _root["mc"+i].onEnterFrame = function(){
  3.         if(this._x < Stage.width){
  4.             this._x = this._x+i;
  5.         }
  6.                 else if(abbruchbedingung==true){
  7.                      delete _root["mc"+i].onEnterFrame;// den laufenden Event löschen, falls nicht mehr benötigt
  8.                  i++;
  9.                  _level0.fkt(i);
  10.                 }
  11.     }   
  12. }
  13.  
  14. i=0;
  15. fkt(0);
  Mit Zitat antworten
Alt 17-02-2005, 23:22   #3 (permalink)
meistens harmlos
 
Benutzerbild von rena
 
Registriert seit: Jun 2001
Ort: Stuttgart
Beiträge: 17.643
Vielleicht versteh ich's auch falsch aber wegen der gleichen Geschwindigkeit ... da hab ich mich auch kurz gewundert.
Aber es wird ja in der Tat auch den letzten Wert von i zugegriffen, da der nicht in (und damit für) den Movieclip definiert ist sondern die Variable auf der Zeitleiste der Funktion liegt und natürlich zuletzt den letzten Wert hat - für alle.

So sollte es aber gehen
ActionScript:
  1. for(i=0;i<mcArray.length;i++) {
  2.     _root["mc"+i].speed=i
  3.     _root["mc"+i].onEnterFrame = function()
  4.     {
  5.         if(this._x < Stage.width)
  6.         {
  7.             this._x = this._x+this.speed;
  8.         }
  9.     }   
  10. }
Gruß
Rena

Edit: Aber kann auch sein, dass du hintereinander meintest, jetzt wo ich's lese ... btw. -> hi agedoubleju - hehe, kaum will man was antworten, da warst du schon schneller. Nicht schlecht Herr Specht.
__________________
www.rena-hermann.de

The angels have the phone box

Geändert von rena (17-02-2005 um 23:27 Uhr)
rena ist offline   Mit Zitat antworten
Alt 17-02-2005, 23:42   #4 (permalink)
Neuer User
 
Benutzerbild von BigLebowski
 
Registriert seit: May 2004
Beiträge: 25
hei super, ihr seid ja wirklich auf zack... nee, ich meinte tatsächlich nicht hintereinander ausgeführte events sondern parallel. hatte nur meine probleme das zu formulieren nach rena's lösung hab ich gesucht. bin ich nicht drauf gekommen, dem mc einfach eine entprechende variable außerhalb des onEnterFrame zu vergeben. dank euch beiden für die raschen antworten.
__________________
COP: And was there anything of value in the car? DUDE: Huh? Oh. Yeah. Tape deck. Couple of Creedence tapes. And there was a, uh. . . my briefcase. COP: In the briefcase? DUDE: Papers. Just papers. You know, my papers. Business papers. COP: And what do you do, sir? DUDE: I'm unemployed.
BigLebowski 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 23:18 Uhr.

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


Copyright ©1999 – 2012 Marc Thiele