Zurück   Flashforum > Flash > ActionScript > ActionScript 1

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 16-10-2005, 11:31   #1 (permalink)
Neuer User
 
Registriert seit: Nov 2001
Beiträge: 133
Kombination von function -> for -> onLoadComplete?

Hallo,
also ich hab das eine Funktion in der es eine For-Schreife gibt (in welcher Texte und Dateipfade von Bildern ausgelesen werdern) und in dieser befindet sich dann eine onLoadComplete-Abfrage.
Jetzt scheint die onLoadComplete-Abfrage nicht zu funktionieren. Liegt das daran dass die Abfrage in einer For-Schleife stattfindet?
ActionScript:
  1. function textfeld() {
  2.     for (var i = 0; i<anzahl; i++) {
  3.         _root.createEmptyMovieClip("textmc"+i, i);
  4.         _root["textmc"+i].createEmptyMovieClip("bildmc"+i, i+10);
  5.         _root["Lader"+i] = new MovieClipLoader();
  6.         _root["LaderListener"+i] = new Object();
  7.         _root["Lader"+i].addListener(_root["LaderListener"+i]);
  8.         _root["textmc"+i].attachMovie("maske", "maske"+i, i+20);
  9.         _root["Lader"+i].loadClip(XMLdaten_bild[i], _root["textmc"+i]["maske"+i].ladebitch);
  10.         _root["textmc"+i].createTextField("textfeld"+i, i+40, 0, 0, 0, 0);
  11.         _root["textmc"+i]["textfeld"+i].autoSize = true;
  12.         function ColorMe(c, s) {
  13.             return '<font color="#'+c+'">'+s+'</font>';
  14.         }
  15. _root["Lader"+i].onLoadError = function() {
  16.         trace("kann nicht geladen werden");
  17.     };
  18.    
  19.        
  20.     }
  21.     _root["Lader"+i].onLoadComplete = function() {
  22. //ab hier wird nichts mehr ausgeführt...
  23. _root["textmc"+i]["bildmc"+i].setMask(_root["textmc"+i]["maske"+i]);
  24.         trace("geladen");
  25.         trace(i);
  26.         if (i<4) {
  27.             _root["textmc"+i].flyin(-200, 0, i*200, 0, 2);
  28.             trace("<4");
  29.         } else {
  30.             trace(">4");
  31.             _root["textmc"+i]._y = 200;
  32.             _root["textmc"+i].flyin(-200, 200, n*200, 200, 2);
  33.             n = n+1;
  34.         }
  35.         trace(XMLdaten_bild[i]);
  36.         trace(_root["textmc"+i]["bildmc"+i].totalBytes);
  37.     };
  38.    
  39. }

ist da irgendwo ein Grundlegender Fehler? Wie sollte ich das am besten Lösen?

Vielen Dank schonmal für die Antworten.
qwer ist offline   Mit Zitat antworten
Alt 16-10-2005, 11:37   #2 (permalink)
Neuer User
 
Benutzerbild von :: RK ::
 
Registriert seit: Jan 2002
Ort: Umgebung Stuttgart
Beiträge: 5.412
hi,

Zitat:
Zitat von qwer
Jetzt scheint die onLoadComplete-Abfrage nicht zu funktionieren. Liegt das daran dass die Abfrage in einer For-Schleife stattfindet?
so wie das hier aussieht, befindet sich deine "onLoadComplete-Function"
AUßERHALB der for-schleife, und nicht innerhalb.

__________________
Das Glück im Leben hängt von den guten Gedanken ab, die man hat.

Easing_Equations / Flash Kontaktformular / FlashPlugin W3C konform / Nützliche Beiträge zu FAQs

Geändert von :: RK :: (16-10-2005 um 11:38 Uhr)
:: RK :: ist offline   Mit Zitat antworten
Alt 16-10-2005, 12:06   #3 (permalink)
:Void
 
Benutzerbild von janoshnosh
 
Registriert seit: Jun 2005
Ort: börlin
Beiträge: 931
hi, jetzt habe ich so lange hieran gearbeitet, jetzt kann ich mir RK nur noch anschließen , das ding sitzt außerhalb der for-schleife. ich poste dir trotzdem mal ein beispiel dafür, wie du den code übersichtlicher halten kannst, indem du mehr mit funktionen arbeitest. das erspart die ne menge an _root[i][k]["AS"+j].adkkj["JK"+asjk]._x - gecode. habe das ding natürlich nicht getestet, mir aber große mühe gegeben, die MC-hierarchie beizubehalten (bin nicht der fan von verschachtelten mc's, deswegen schwer für mich) - vielleicht hats ja geklappt.
ActionScript:
  1. function setNewMcLoader () :MovieClipLoader {
  2.    
  3.     var newMCL:MovieClipLoader = new MovieClipLoader();
  4.     var newListener:Object = new Object();
  5.        
  6.     newListstener.onLoadError = function() {
  7.         trace("kann nicht geladen werden");
  8.     };
  9.     newListener.onLoadComplete = function(MC:MovieClip, loadedBytes:Number, totalBytes:Number) {
  10.         //MC ist der parameter für den MC, in den geladen wird
  11.         var textMC:MovieClip = MC._parent._parent;
  12.             textMC.setMask(MC._parent);
  13.             trace("geladen");
  14.         if (i<4) {
  15.             textMC.flyin(-200, 0, i*200, 0, 2);
  16.         } else {
  17.             textMC._y = 200;
  18.             textMC.flyin(-200, 200, n*200, 200, 2);
  19.             n = n+1;
  20.         }
  21.         trace(totalBytes);
  22.     }
  23.     newMCL.addListener(newListener);   
  24.     return newMCL;
  25. }
  26.  
  27. function textfeld() {
  28.     for (var i = 0; i<anzahl; i++) {
  29.         var newMC:MovieClip = _root.createEmptyMovieClip("textmc"+i, i);
  30.         //ab hier kannst du dir das viele "i" sparen, weil du ja pro mc nur einen weiteren mc erstellst
  31.             newMC.createEmptyMovieClip("bildmc", 10);
  32.             newMC.attachMovie("maske", "maske", 20);
  33.             newMC.createTextField("textfeld", 40, 0, 0, 0, 0);
  34.             newMC["textfeld"+i].autoSize = true;
  35.         //hier wird die funktion setNewMcLoader() aufgerufen und der MCL wird zurückgegeben.
  36.         var newMCL:MovieClipLoader = setNewMcLoader();
  37.             newMCL.loadClip(XMLdaten_bild[i], newMC.maske.ladebitch);
  38.     }
  39. }
  40.  
  41. function ColorMe(c, s) {
  42.     return '<font color="#'+c+'">'+s+'</font>';
  43. }
viel spaß damit
gruß janosch
janoshnosh ist offline   Mit Zitat antworten
Alt 16-10-2005, 14:36   #4 (permalink)
Neuer User
 
Registriert seit: Nov 2001
Beiträge: 133
Danke an janoshnosh, leider funktioniert der Code auf Anhieb nicht.

Danke an :: RK :: leider erzeugt er wenn ich die For-Schleife richtig schließe zwar wie gewünscht die Textfelder und läd auch die Bilder hinein, diese Animation der MC nicht (die einen Frame vorher per Prototype definiert wird). Hier noch mal der Code der nicht ausgeführt wird:
ActionScript:
  1. _root["Lader"+i].onLoadComplete = function(i) {
  2.         _root["textmc"+i]["bildmc"+i].setMask(_root["textmc"+i]["maske"+i]);
  3.         trace("geladen");
  4.         trace(i);
  5.         if (i<4) {
  6.             _root["textmc"+i].flyin(-200, 0, i*200, 0, 2);
  7.             trace("<4");
  8.         } else {
  9.             trace(">4");
  10.             _root["textmc"+i]._y = 200;
  11.             _root["textmc"+i].flyin(-200, 200, n*200, 200, 2);
  12.             n = n+1;
  13.         }
  14.         trace(XMLdaten_bild[i]);
  15.         trace(_root["textmc"+i]["bildmc"+i].totalBytes);
  16.     };

und hier ist diese Flying-Prototype aus dem vorherigen Frame

ActionScript:
  1. MovieClip.prototype.flyin = function(startX, startY, zielX, zielY, speed) {
  2.         this._x = startX;
  3.         this.onEnterFrame = function() {
  4.                 if (Math.round(this._x) != zielX) {
  5.                         this._x += Math.round((zielX-this._x)/speed);
  6.                 } else {
  7.                         delete this.onEnterFrame;
  8.                         this._x = Math.round(zielX);
  9.                 }
  10.         };
qwer ist offline   Mit Zitat antworten
Alt 16-10-2005, 15:10   #5 (permalink)
................
 
Benutzerbild von Der Frager
 
Registriert seit: Jun 2004
Beiträge: 15.890
Hi!
Das ist ja ganz schön wüst... Ich würde dem Lader mal eine id anhängen. i wird ja schließlich durchgezählt und hat am Ende ja immer den selben Wert. Also beim Erstellen des Loaders:
ActionScript:
  1. _root["Lader"+i] = new MovieClipLoader();
  2. _root["Lader"+i].id =i;
...und bei complete:
ActionScript:
  1. _root["Lader"+i].onLoadComplete = function() {
  2. var i = this.id
  3.         _root["textmc"+i]["bildmc"+i].setMask(_root["textmc"+i]["maske"+i]);
  4.         trace("geladen");
  5.         trace(i);
  6. ...
__________________

ternärer Konditionaloperator

+++ Bitte keine Privat-Nachrichten bezüglich Flashfragen! +++
Der Frager ist offline   Mit Zitat antworten
Alt 16-10-2005, 16:18   #6 (permalink)
Neuer User
 
Registriert seit: Nov 2001
Beiträge: 133
stimmt daran hats scheinbar gelegen. Jetzt klappt fast alles außer das onLoadComplete.
Die Animation wird ausgeführt bevor alles geladen sind.
Wie kann ich das verhindern. Es sollen also erst alle MCs attached sein und alle Textferder erstellt und vorallem alle Bilder geladen sein bevor die Animation (flying) ausgeführt wird.

Bis jetzt wird die Animation fast sofort ausgeführt und danach erscheinen (beim testen mit 56k) so allmählich die Bilder...

Noch ne Idee?
Danke!
qwer ist offline   Mit Zitat antworten
Alt 16-10-2005, 16:28   #7 (permalink)
................
 
Benutzerbild von Der Frager
 
Registriert seit: Jun 2004
Beiträge: 15.890
Äh, ich seh's gerade:
ActionScript:
  1. _root["Lader"+i].onLoadComplete = function() {
  2.         var i = this.id
  3.         _root["textmc"+i]["bildmc"+i].setMask(_root["textmc"+i]["maske"+i]);
  4.         trace("geladen");
  5.         trace(i);
  6.         ...
das ist ja der Loader und nicht der Listener:
ActionScript:
  1. _root["LaderListener"+i].onLoadComplete = function() {
  2.         var i = this.id
  3.         _root["textmc"+i]["bildmc"+i].setMask(_root["textmc"+i]["maske"+i]);
  4.         trace("geladen");
  5.         trace(i);
  6.         ...
Dann braucht der natürlich auch die id und nicht der MovieClipLoader...
__________________

ternärer Konditionaloperator

+++ Bitte keine Privat-Nachrichten bezüglich Flashfragen! +++
Der Frager ist offline   Mit Zitat antworten
Alt 16-10-2005, 20:20   #8 (permalink)
Neuer User
 
Registriert seit: Nov 2001
Beiträge: 133
Ok fein. Es läuft soweit nur leider werden immer noch alle Elemente gleichzeitig bewegt bevor sie geladen sind. Noch ne Idee worans liegen kann?

Hier noch mal der komplette Code (aus diesem Frame):
ActionScript:
  1. function textfeld() {
  2.     for (var i = 0; i<anzahl; i++) {
  3.         _root.createEmptyMovieClip("textmc"+i, i);
  4.         _root["textmc"+i].createEmptyMovieClip("bildmc"+i, i+10);
  5.         _root["Lader"+i] = new MovieClipLoader();
  6.         _root["LaderListener"+i] = new Object();
  7.         _root["LaderListener"+i].id =i;
  8.         _root["Lader"+i].addListener(_root["LaderListener"+i]);
  9.         _root["textmc"+i].attachMovie("maske", "maske"+i, i+20);
  10.         _root["Lader"+i].loadClip(XMLdaten_bild[i], _root["textmc"+i]["maske"+i].ladebitch);
  11.         _root["textmc"+i].createTextField("textfeld"+i, i+40, 0, 0, 0, 0);
  12.         _root["textmc"+i]["textfeld"+i].autoSize = true;
  13.         function ColorMe(c, s) {
  14.             return '<font color="#'+c+'">'+s+'</font>';
  15.         }
  16.         _root["textmc"+i]["textfeld"+i].html = true;
  17.         _root["textmc"+i]["textfeld"+i].border = true;
  18.         _root["textmc"+i]["textfeld"+i].embedFonts = true;
  19.         _root["textmc"+i]["textfeld"+i].multiline = true;
  20.         _root["textmc"+i]["textfeld"+i].wordWrap = true;
  21.         _root["textmc"+i]["textfeld"+i]._width = 200;
  22.         _root["textmc"+i]["textfeld"+i].htmlText = '<font color="#978B0E" face="Akzidenz Grotesk Roman" size="34">'+XMLdaten_namen[i]+'<br>'+XMLdaten_beschreibung[i]+'</font>';
  23.    
  24.     _root["LaderListener"+i].onLoadComplete = function() {
  25.         var i = this.id;
  26.         trace("geladen");
  27.         trace(i);
  28.         if (i<4) {
  29.             _root["textmc"+i].flyin(-200, 0, i*200, 0, 2);
  30.             trace("<4");
  31.         } else {
  32.             trace(">4");
  33.             _root["textmc"+i]._y = 200;
  34.             _root["textmc"+i].flyin(-200, 200, n*200, 200, 2);
  35.             n = n+1;
  36.         }
  37.         trace(XMLdaten_bild[i]);
  38.         trace(_root["textmc"+i]["bildmc"+i].totalBytes);
  39.     };
  40.     _root["Lader"+i].onLoadError = function() {
  41.         trace("kann nicht geladen werden");
  42.     };
  43. }
  44. }
qwer 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 18:43 Uhr.

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


Copyright ©1999 – 2012 Marc Thiele