Zurück   Flashforum > Flash > Flash Fortgeschritten > Flash 8

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 21-06-2009, 12:16   #1 (permalink)
is online
 
Registriert seit: Jan 2002
Beiträge: 82
Thumbs up onLoadInit und Variablenübergabe

Hallo,

ich lade innerhalb einer einfachen Schleife Bilder aus einem Array in duplizierte Movieclips. Wenn ein Bild geladen ist, ermittle ich die Breite des Bildes (ist ja erst möglich, wenn das Bild geladen ist) und will diese in das Array mit den Bilddaten eintragen.

Jetzt habe ich das Problem, dass die Funktion onLoadInit ja erst ausgeführt wird, wenn das Bild geladen wurde. Während dem Laden des Bildes läuft die for-schleife ja bereits weiter. Wenn ich dann auf meine Zählervariable "i" zurückgreifen will wenn das Bild endlich geladen ist, hat "i" ja bereits schon einen veränderten bzw höheren Wert.

Wie kann ich der onLoadInit-Function beim Aufruf denn die den Wert von "i" übergeben, damit ich nach dem Laden weiß, bei welchem Array-Index ich die Breite zuweisen muss?

Ich hoffe ich habs "einigermaßen" verständlich ausgedrückt

Das ganze sieht so aus:

PHP-Code:
var a_art_data:Array = new Array();

a_art_data[0] = new Array('pd1.png');
a_art_data[1] = new Array('pd2.png');

for(
i=0;i<a_art_data.length;i++){     

    
// Artikel Movieclip duplizieren
    
duplicateMovieClip(_root.i_artikel.i_artikelset"i_artikelset_"+i,i+1);    
  
    
// Aktueller Movieclip
    
mc _root.i_artikel["i_artikelset_"+i];

    var 
mcl = new MovieClipLoader();  
    var 
ml = new Object();  
    
ml.onLoadInit = function(obj) {  

    
// Breite des Bildes in Array eintragen
        // Hier müsste ich wissen, welchen Wert "i" denn hatte (also welcher Array-Index zu diesem Bild gehört) und welchem Array-Index ich die Breite zuweisen muss:           
    
a_art_data[i][1] =  obj._width;


    };  
    
mcl.addListener(ml);  
    
mcl.loadClip(a_art_data[i][0],mc.i_artikelbild);       
 

__________________
Die dümmsten Programmierer haben die dicksten Programme...

Geändert von Oneside (21-06-2009 um 12:19 Uhr)
Oneside ist offline   Mit Zitat antworten
Alt 21-06-2009, 14:49   #2 (permalink)
agedoubleju
Gast
 
Beiträge: n/a
Nimm keine for-Schleife, sondern lade hintereinander...
  Mit Zitat antworten
Alt 22-06-2009, 07:25   #3 (permalink)
is online
 
Registriert seit: Jan 2002
Beiträge: 82
Hallo agedoubleju,

Das Problem ist, dass ich nicht weiß, wie viele Einträge in meinem Array sind, bzw wieviele Bilder ich laden muss. Die Daten werden per Laufzeit übergeben.
Das müsste also dynamisch bleiben.

Jemand ein Idee?
Kann ich der onLoadInit-Funktion denn beim Aufruf keine Daten übergeben?

Gruß
Oneside
__________________
Die dümmsten Programmierer haben die dicksten Programme...
Oneside ist offline   Mit Zitat antworten
Alt 22-06-2009, 09:31   #4 (permalink)
agedoubleju
Gast
 
Beiträge: n/a
Zitat:
Das müsste also dynamisch bleiben.
Bleibt es doch auch wenn hintereinander geladen wird, statt gleichzeitig. Du kannst natürlich auch versuchen, im onLoadInit das übergebene Objekt auszuwerten.
  Mit Zitat antworten
Alt 22-06-2009, 09:50   #5 (permalink)
no guts no glory
 
Benutzerbild von readme.txt
 
Registriert seit: May 2004
Ort: Nordhorn
Beiträge: 7.998
das kannst du doch einfach über den MC-Namen regeln ...

PHP-Code:
var arr:Array = new Array();
var 
mcl:MovieClipLoader = new MovieClipLoader();  
var 
ml:Object = new Object();   

mcl.addListener(ml);

ml.onLoadInit = function(mc:MovieClip):Void {
  var 
_id:Number parseInt(mc._name.split("mc").join(""));

  
arr[i] = new Array("blabla",mc._width);
}

for(var 
i:Number=0i<10i++) {
  var 
mc:MovieClip this.createEmptyMovieClip("mc"+i,i);

  
mcl.loadClip("bild"+i+".jpg",mc);

PS: Du brauchst auch nicht in jedem Schleifendurchlauf eine neue Instanz der MovieClipLoader-Klasse und einen neuen Listener erstellen. Das ist Ressourcenverschwendung.
__________________
Bitte keine Privaten Nachrichten mit Fragen, dazu ist das Forum selbst da. Danke.

'We live in an amazing, amazing world, and it's wasted on the crappiest generation of spoiled idiots.'
readme.txt ist offline   Mit Zitat antworten
Alt 22-06-2009, 12:52   #6 (permalink)
is online
 
Registriert seit: Jan 2002
Beiträge: 82
Gute Idee mit dem Namen, aber leider bekomme ich die Bilder übergeben und hab keine Möglichkeit den Dateinamen der Bilder extern anzupassen
__________________
Die dümmsten Programmierer haben die dicksten Programme...

Geändert von Oneside (22-06-2009 um 12:53 Uhr)
Oneside ist offline   Mit Zitat antworten
Alt 22-06-2009, 12:57   #7 (permalink)
is online
 
Registriert seit: Jan 2002
Beiträge: 82
Zitat:
Zitat von agedoubleju Beitrag anzeigen
Bleibt es doch auch wenn hintereinander geladen wird, statt gleichzeitig. Du kannst natürlich auch versuchen, im onLoadInit das übergebene Objekt auszuwerten.
Wenn ich die Bilder hintereinander lade, dann müsste ich ja dem Script irgendwie sagen "warte bis Datei geladen und lade dann die nächste Grafik".
Welche Möglichkeit hab ich das Script solange anzuhalten, bis eine Grafik geladen ist, um dann wieder anzustossen um die nächste zu laden?
Timer/Timeout oder sowas?
__________________
Die dümmsten Programmierer haben die dicksten Programme...

Geändert von Oneside (22-06-2009 um 13:11 Uhr)
Oneside ist offline   Mit Zitat antworten
Alt 22-06-2009, 13:21   #8 (permalink)
agedoubleju
Gast
 
Beiträge: n/a
Zitat:
Wenn ich die Bilder hintereinander lade, dann müsste ich ja dem Script irgendwie sagen "warte bis Datei geladen und lade dann die nächste Grafik".
Welche Möglichkeit hab ich das Script solange anzuhalten, bis eine Grafik geladen ist
Du hast doch den onLoadInit... Einfach hier einen Zähler solange hochzählen, bis alle Bilder geladen sind. Nach dem Zähler mit loadClip das nächste Bild laden etc. Hier mal ein Ansatz:
PHP-Code:
//Zähler
var index:Number 0;

//Liste der Bilder
var urls:Array = new Array("bild1.jpg""bild2.jpg","bild3.jpg");

//Liste der MCs
var mcs:Array = new Array();
var 
len:Number urls.length;

//leere MCs erzeugen
for(var i=1;i<=len;i++){
   
this.mcs.push(this.createEmptyMovieClip("con"+i,i));
   
this["con"+i]._x = (i*100);//evtl. positionieren
}

//erstes Bild laden
var mclListener:Object = new Object();
var 
mcLoader:MovieClipLoader = new MovieClipLoader();
mcLoader.addListener(mclListener);
mcLoader.loadClip(urls[index], mcs[index]);


//während des Ladens bspw. um Ladebalken o.ä. zu aktualisieren
mclListener.onLoadProgress = function(target:MovieClipbytesLoaded:NumberbytesTotal:Number):Void {
    
trace(target ".onLoadProgress with " bytesLoaded " bytes of " bytesTotal);
    var 
prozent bytesLoaded*100/bytesTotal;
   
_root.meineTextfeldinstanz.text ""+prozent+" %"
}


//fertiggeladen
mclListener.onLoadInit = function(mc:MovieClip) {
    
trace("fertig, mc="+mc);
   
index++;
   if (
index len) {//sind noch weitere zu laden?
       
mcLoader.loadClip(urls[index], mcs[index]);
   }
}

this.stop(); 
  Mit Zitat antworten
Alt 22-06-2009, 13:26   #9 (permalink)
no guts no glory
 
Benutzerbild von readme.txt
 
Registriert seit: May 2004
Ort: Nordhorn
Beiträge: 7.998
Zitat:
Zitat von Oneside Beitrag anzeigen
Gute Idee mit dem Namen, aber leider bekomme ich die Bilder übergeben und hab keine Möglichkeit den Dateinamen der Bilder extern anzupassen
musst du ja auch nicht, ich hab das nur in meinem Beispiel so gemacht. Das funktioniert auch bei deiner Variante, musst das nur entsprechend anpassen.
__________________
Bitte keine Privaten Nachrichten mit Fragen, dazu ist das Forum selbst da. Danke.

'We live in an amazing, amazing world, and it's wasted on the crappiest generation of spoiled idiots.'
readme.txt 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 19:20 Uhr.

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


Copyright ©1999 – 2012 Marc Thiele