Zurück   Flashforum > Flash > ActionScript > ActionScript 1

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 04-02-2004, 07:28   #1 (permalink)
Neuer User
 
Registriert seit: Jan 2003
Beiträge: 109
Unhappy zuweisung aus array funzt nicht

hi flasher,

ich bin verzweifelt.
im unten stehenden script ist irgendwo ein fehler,
den ich nicht finden kann.

ActionScript:
  1. function zeigePunkte() {//immer bei Klick der UP
  2.     if(p > 0){
  3.         for(e = 0; e < _root.arr_Punkteweg.length; e++){
  4.             _root["kreis"+p]._visible = false;
  5.         }
  6.     }
  7.     hp= _root.geklickt;
  8.     _root.arr_Punkteweg = new Array(_root.n[hp]);
  9.     trace("*************** Es müssen dies Punkte sein: " + _root["arr_UP_xPos"+hp]);
  10.     for(p = 0; p < _root.n[hp]; p++){
  11.         trace("für den Eintrag an der Stelle: " + p);
  12.         var mc_p = catch_auto.attachMovie("kreis_0", "kreis"+p, p+2000);
  13.         mc_p.name10 = "kreis"+p;
  14.         mc_p._xscale = 50;
  15.         mc_p._yscale = 50;
  16.         mc_p._x = _root["arr_UP_xPos"+hp][p];
  17.         mc_p._y = _root["arr_UP_yPos"+hp][p];
  18.         trace("Punkt: " + mc_p.name10 + " mit " + mc_p._x + " und " + mc_p._y);
  19.         _root.arr_Punkteweg[p] = "kreis"+p;
  20.     }
  21. }

das problem: im trace gibt mir die funktion die richtigen
x- und y-positionen aus. doch die zuweisung des wertes
aus dem array für:
ActionScript:
  1. mc_p._x = _root["arr_UP_xPos"+hp][p];
  2. mc_p._y = _root["arr_UP_yPos"+hp][p];
ergibt immer "0".

zur info: das array liegt im _root und ist auf jeden fall
innerhalb der funktion auch ansprechbar. die funktion
wird bei button klick aufgerufen.

wie kann das denn sein?

gruß und danke,
toggle
toggle ist offline   Mit Zitat antworten
Alt 04-02-2004, 12:06   #2 (permalink)
agedoubleju
Gast
 
Beiträge: n/a
Setz mal einen onEnterFrame-Event hinter den var mc_p = catch_auto.attachMovie("kreis_0", "kreis"+p, p+2000); - nur um sicherzugehen, dass der MC tatsächlich attacht wurde. In diesen Event kannst du dann Skalierung, Positionierung etc. legen.

BTW: Ist das gewollt, dass du zweimal die lokale Variable p verwendest? if(p > 0){... und for(p = 0; p < _root.n[hp]; p++){...

Das erste p zumindest dürfte so eigentlich nie true werden, da p bei Start der Funktion undefined ist...
  Mit Zitat antworten
Alt 04-02-2004, 13:22   #3 (permalink)
Neuer User
 
Registriert seit: Jan 2003
Beiträge: 109
hi agedoubleju,

mit dem "p" hattest du recht. war ein copy-paste-fehler.

allerdings mit der onEnterFrame-Funktion komm ich nicht
klar. da meckert flash immer wegen scriptfehler "nur bei
movieClip instanzen bla".

kannst du mir die funktion kurz beschreiben?
ActionScript:
  1. onClipEvent () {
  2.  trace("bin in der funktion!");
  3. }
ist wohl nicht so richtig?



hier nochmal das aktualiesierte script:
ActionScript:
  1. function zeigePunkte() {//immer bei Klick der UP
  2.     if(z > 0){
  3.         for(e = 0; e < _root.arr_Punkteweg.length; e++){
  4.             _root["kreis"+p]._visible = false;
  5.         }
  6.     }
  7.     hp= _root.geklickt;
  8.     _root.arr_Punkteweg = new Array(_root.n[hp]);
  9.     trace("*************** Es müssen dies Punkte sein: " + _root["arr_UP_xPos"+hp]);
  10.     for(p = 0; p < _root.n[hp]; p++){
  11.         trace("für den Eintrag an der Stelle: " + p);
  12.         var mc_p = catch_auto.attachMovie("kreis_0", "kreis"+p, p+2000000);
  13.         mc_p.name10 = "kreis"+p;
  14.         mc_p._xscale = 50;
  15.         mc_p._yscale = 50;
  16.         mc_p._x = _root["arr_UP_xPos"+hp][p];
  17.         mc_p._y = _root["arr_UP_yPos"+hp][p];
  18.         trace("Punkt: " + mc_p.name10 + " mit " + mc_p._x + " und " + mc_p._y);
  19.         _root.arr_Punkteweg[p] = "kreis"+p;
  20.     }
  21. }

danke.
toggle ist offline   Mit Zitat antworten
Alt 04-02-2004, 15:39   #4 (permalink)
agedoubleju
Gast
 
Beiträge: n/a
Vergiss die onClipEvents!
ActionScript:
  1. this.createEmptyMovieClip("watcher",1);
  2. this.watcher.onEnterFrame=function(){
  3. //irgendetwas ausführen oder überprüfen
  4. //nicht vergessen: mit delete this.onEnterFrame den event wieder löschen
  5. //und den mc mit _level0.watcher.removeMovieClip() wieder entfernen
  6. }
  Mit Zitat antworten
Alt 09-02-2004, 08:20   #5 (permalink)
Neuer User
 
Registriert seit: Jan 2003
Beiträge: 109
hi,

also ich weiss nicht warum, aber hab den film nochmal
abgespielt, und es wird nichts mehr im trace erkannt.
kein name, keine pos...

scheint so, dass die punkte wirklich nicht erzeugt
werden. aber wieso?

habe ein ähnliches script bereits an anderer stelle
gebraucht und dort funktioniert es. (?)

der einzige unterschied ist, dass ich die punkte einem
mc zuweise der quasi auf der bühne auch nur als punkt
existiert (leere Instanz namens "catch_auto"), und dass
die positionen aus einer xml datei ausgelesen
werden. aber trotzdem müßte ich doch wenigstens am
mc-registrierungspunkt die übereinander attachten punkte erkennen können.
bei dem bereits verwendeten code attache ich buttons
direkt auf der bühne ohne xml. hilft euch das weiter?

danke für jeden ratschlag!

Geändert von toggle (09-02-2004 um 08:22 Uhr)
toggle ist offline   Mit Zitat antworten
Alt 09-02-2004, 11:00   #6 (permalink)
agedoubleju
Gast
 
Beiträge: n/a
Zitat:
hilft euch das weiter?
Nicht wirklich... Poste mal das Script.
  Mit Zitat antworten
Alt 09-02-2004, 11:53   #7 (permalink)
Neuer User
 
Registriert seit: Jan 2003
Beiträge: 109
hi agedoubleju!

super, dass wir uns hier wieder treffen

hier die funktion, die nicht funktioniert! dazu gehört der
trace! verknüpfung "k0" existiert in bibliothek.

ActionScript:
  1. function zeigePunkte(){//immer bei Klick der Buttons
  2.     _root.arr_Punkteweg = new Array(_root.n[hp]);
  3.     trace("*************** Es müssen diese Punkte sein: " + _root["arr_UP_xPos"+_root.geklickt] + " und " + _root["arr_UP_yPos"+_root.geklickt]);
  4.     for(p = 0; p < _root.n[_root.geklickt]; p++){
  5.         trace("für den Eintrag an der Stelle: " + p);
  6.         var mc_p = _root.catch_punkte.attachMovie("k0", name, p+6000);
  7.         _root.name = "kreis"+p;
  8.         trace(_root["arr_UP_xPos"+_root.geklickt][p]);//wird erkannt!!
  9.         _root[name]._x = _root["arr_UP_xPos"+_root.geklickt][p];
  10.         trace(mc_p._x);//wird NICHT erkannt!!
  11.         _root[name]._y = _root["arr_UP_yPos"+_root.geklickt][p];
  12.     }
  13. }

im trace wird folgendes ausgegeben:
ActionScript:
  1. *************** Es müssen diese Punkte sein: 10,20,30,40,50,60,70,80,90,100 und 10,20,30,40,50,60,70,80,90,100
  2. für den Eintrag an der Stelle: 0
  3. 10
  4. undefined
  5. Punkt: kreis0 mit undefined und undefined
  6. für den Eintrag an der Stelle: 1
  7. 20
  8. undefined
  9. Punkt: kreis1 mit undefined und undefined
  10. für den Eintrag an der Stelle: 2
  11. 30
  12. undefined
  13. Punkt: kreis2 mit undefined und undefined
  14. für den Eintrag an der Stelle: 3
  15. 40
  16. undefined
  17. Punkt: kreis3 mit undefined und undefined
  18. für den Eintrag an der Stelle: 4
  19. 50
  20. undefined
  21. Punkt: kreis4 mit undefined und undefined
  22. für den Eintrag an der Stelle: 5
  23. 60
  24. undefined
  25. Punkt: kreis5 mit undefined und undefined
  26. für den Eintrag an der Stelle: 6
  27. 70
  28. undefined
  29. Punkt: kreis6 mit undefined und undefined
  30. für den Eintrag an der Stelle: 7
  31. 80
  32. undefined
  33. Punkt: kreis7 mit undefined und undefined
  34. für den Eintrag an der Stelle: 8
  35. 90
  36. undefined
  37. Punkt: kreis8 mit undefined und undefined
  38. für den Eintrag an der Stelle: 9
  39. 100
  40. undefined
  41. Punkt: kreis9 mit undefined und undefined

fazit: das array+inhalte wird richtig ausgelesen
nur die zuweisung zu den x;y-koordinaten
funzt nicht.

und hier mal eine ähnliche funktion an anderer
stelle (auszug) ohne xml:

ActionScript:
  1. for(w = 0; w < _root.arr_UPanzeige.length; w++){
  2.         var mc = _root.attachMovie("fields_up_up", "up_up"+w, w+2000);
  3.         mc.name5 = "up_up"+w;
  4.         mc._x = startx;
  5.         mc._y = starty+w*(mc._height+2);
  6.         mc.title = _root["arr_UP_UP_namen"+i][w];
  7.         _root.arr_UPweg[w] = "up_up"+w;
  8.     }

danke dir!
toggle ist offline   Mit Zitat antworten
Alt 09-02-2004, 12:46   #8 (permalink)
agedoubleju
Gast
 
Beiträge: n/a
Siehe meine erste Antwort auf deinen Thread. Nach einem attachMovie steht der MC nicht immer im gleichen Frame auf der Bühne, deshalb würde ich das Folgende sicherheitshalber in einen onEnterFrame-event legen.
  Mit Zitat antworten
Alt 10-02-2004, 10:47   #9 (permalink)
Neuer User
 
Registriert seit: Jan 2003
Beiträge: 109
hallo holger,

hab jetzt folgenden code eingefügt:

ActionScript:
  1. for(p = 0; p < _root.n[hp]; p++){
  2.         trace("für den Eintrag an der Stelle: " + p);
  3.         var mc_p = _root.catch_punkte.attachMovie("kreis_0", "kreis"+p, p++);
  4.         mc_p.onEnterFrame=function(){
  5.             this._x = _root["arr_UP_xPos"+hp][p];
  6.             this._y = _root["arr_UP_yPos"+hp][p];
  7.             trace("Punkt: " + this.name + " mit " + this._x + " und " + this._y);
  8.             delete this.onEnterFrame;
  9.         }
  10.     }

aber es funktioniert nicht.
es werden alle punkte attached, aber sie liegen alle übereinander
auf dem registrierungspunkt ihres mc namens "catch_punkte" auf
(0,0). allerdings bleibe ich im gleichen frame!

die positionen werden nicht richtig übergeben.
setze ich anstelle der array-zuweisung eine zahl, funktioniert
es. hab auch schon versucht, die array-zuweisung in eine
variable zu schreiben und diese dann der ._x bzw ._y koordinate
zu übergeben, aber auch das schlug fehl.
trace ich z.b.
ActionScript:
  1. _root["arr_UP_xPos"+hp][p]
wird der wert richtig ausgegeben. die zuweisung
ActionScript:
  1. mc_p._x = _root["arr_UP_xPos"+hp][p];
  2. mc_p._y = _root["arr_UP_yPos"+hp][p];
wird nicht durchgeführt.

da könnte man doch verzweifeln...

Geändert von toggle (10-02-2004 um 10:55 Uhr)
toggle ist offline   Mit Zitat antworten
Alt 10-02-2004, 14:25   #10 (permalink)
Neuer User
 
Registriert seit: Jan 2003
Beiträge: 109
problem behoben!

hallo an alle hilfreichen!

problem behoben!!!! huraaaaa!

lag am auslesen aus der xml-datei. bei ziffern-einträgen im
xml-tag immer mit bla.bla.nodeValue; auslesen.
ansonsten erkennt flash den eintrag nicht als number.

ich hatte nur mit bla.bla.childNodes; ausgelesen.

danke nochmal an euch!

gruß,
toggle
toggle 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 12:18 Uhr.

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


Copyright ©1999 – 2012 Marc Thiele