Zurück   Flashforum > Flash > ActionScript > ActionScript 1

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 24-11-2003, 17:10   #1 (permalink)
Neuer User
 
Registriert seit: Dec 2002
Ort: Hamburg
Beiträge: 61
Warum geht this.onEnterFrame = meineFunktion(); nicht?

Hi,

ich dupliziere in einer for-schleife einige MC´s, denen möchte ich noch eine onEnterFrame-Function mitgeben, aber so wie ich es will geht es nicht, warum?

Hier der Code, alles im ersten Frame:

ActionScript:
  1. for(i=0;i<6;i++){
  2.             duplicateMovieClip(_root.gfxArray[i], "neu"+gfxArray[i]+"ID"+gfxID[i],i);
  3. this["neu"+gfxArray[i]+"ID"+gfxID[i]].onEnterFrame = function(){
  4.     if(this._y < maxY){
  5.         this._y += speed;
  6.     }else{
  7.         if(this._name == "neu"+gfxArray[startsymbol]+"ID"+gfxID[startsymbol]){
  8.             trace("ich bins " + this._name);
  9.             }
  10.             removeMovieClip(this);
  11.             }
  12. }

Das funktioniert alles Wunderbar, meine Variable sind auch alle deklariert.

Wenn ich jetzt aber meinen code schöner machen will und das hier mache:

ActionScript:
  1. for(i=0;i<6;i++){
  2.             duplicateMovieClip(_root.gfxArray[i], "neu"+gfxArray[i]+"ID"+gfxID[i],i);
  3. this["neu"+gfxArray[i]+"ID"+gfxID[i]].onEnterFrame = bewegen(this._name);
  4. }
  5.  
  6. function bewegen(was){
  7. if(was._y < maxY){
  8.         was._y += speed;
  9.     }else{
  10.         if(was._name == "neu"+gfxArray[startsymbol]+"ID"+gfxID[startsymbol]){
  11.             trace("ich bins " + was._name);
  12.             }
  13.             removeMovieClip(was);
  14.             }
  15.  
  16. }
Geht jedoch nicht, da passiert garnix, warum geht das nicht??
Selbst wenn ich auch was = eval("_root." + was); mache, auch nicht.

Es geht allein nur um diese onEnterFrame zuweisung, die for-schleife ist natürlich in einer function.

Warum das nicht gehen will, verstehe ich leider nicht :-(

Wäre nett, wenn mir jemand sagen könnte, woran es liegt.

Danke.
BaRt4EvEr ist offline   Mit Zitat antworten
Alt 24-11-2003, 18:03   #2 (permalink)
.--. .. ..- ...
 
Benutzerbild von pius
 
Registriert seit: Jul 2002
Ort: munich
Beiträge: 1.345
onEnterFrame wird ohne Argumente aufgerufen ....

wenn du's schöner machen willst, kannst du in der Function ja auch einfach mit 'this' auf den aufrufenden mc zugreifen!!!


ActionScript:
  1. function bewegen(){
  2.         if(this._y < maxY){
  3.                 this._y += speed;
  4.         }else{
  5.                 if(this._name == "neu"+gfxArray[startsymbol]+"ID"+gfxID[startsymbol]){
  6.                         trace("ich bins " + this._name);
  7.                 }
  8.                 removeMovieClip(this);
  9.         }
  10.        
  11. }
__________________
one out of many
pius ist offline   Mit Zitat antworten
Alt 24-11-2003, 18:18   #3 (permalink)
Neuer User
 
Registriert seit: Dec 2002
Ort: Hamburg
Beiträge: 61
HI Pius,

ohne Argumente habe ich es bereits versucht, funktioniert aber leider auch nicht :-(

ActionScript:
  1. this["neu"+gfxArray[i]+"ID"+gfxID[i]].onEnterFrame = bewegen();

und darunter die bewegen function:

ActionScript:
  1. function bewegen(){
  2.     if(this._y < maxY){
  3.         this._y += speed;
  4.     }else{
  5.         if(this._name == "neu"+gfxArray[startsymbol]+"ID"+gfxID[startsymbol]){
  6.             trace("ich bins " + this._name);
  7.             }
  8.             removeMovieClip(this);
  9.             }
  10.     }

Wenn ich das ausprobiere, bewegt sich mein MC, dem ich bei onEnterFrame die function bewegen() zugewiesen habe nicht.

Es wird einzig und allein beim Aufruf mein Haupt MC um ein paar pixel in + y richtung verschoben und das auch nur einmalig, obwohl ich den nicht anspreche.

Und wenn ich ganz normal das hier benutze, funktioniert es ja:

ActionScript:
  1. this["neu"+gfxArray[i]+"ID"+gfxID[i]].onEnterFrame = function(){
  2. this._y += speed;
  3. }

Aber warum?
BaRt4EvEr ist offline   Mit Zitat antworten
Alt 24-11-2003, 18:32   #4 (permalink)
.--. .. ..- ...
 
Benutzerbild von pius
 
Registriert seit: Jul 2002
Ort: munich
Beiträge: 1.345
grrr....!

nicht

ActionScript:
  1. this["neu"+gfxArray[i]+"ID"+gfxID[i]].onEnterFrame = bewegen();

sondern

ActionScript:
  1. this["neu"+gfxArray[i]+"ID"+gfxID[i]].onEnterFrame = bewegen;

also ohne Klammern (sonst weist du der 'onEnterFrame' den Wert der Funktionsausführung von 'bewegen' zu ... du willst aber eine Referenz zuweisen!!!!
__________________
one out of many
pius ist offline   Mit Zitat antworten
Alt 24-11-2003, 18:40   #5 (permalink)
Neuer User
 
Registriert seit: Dec 2002
Ort: Hamburg
Beiträge: 61
Super!

Danke Pius, ich dachte funktionen werden immer mit klammern aufgerufen. Aber jetzt bin ich ja Schlauer :-)

Danke.
BaRt4EvEr ist offline   Mit Zitat antworten
Alt 24-11-2003, 19:58   #6 (permalink)
helpQLODhelp
 
Benutzerbild von bokel
 
Registriert seit: Feb 2002
Ort: Köln
Beiträge: 8.505
Zitat:
Geschrieben von BaRt4EvEr
ich dachte funktionen werden immer mit klammern aufgerufen.
Das ist auch so.
Allerdings willst du die Funktion nicht aufrufen, sondern zuweisen. Deshalb musst du es ohne Klammern machen. Sonst würdest du ja das Ergebnis der Funktion zuweisen.

Aufgerufen wird die Funktion dann später vom onEnterFrame-Handler.

mfg r.
bokel 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 11:23 Uhr.

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


Copyright ©1999 – 2012 Marc Thiele