Preloaderproblem

daflowjoe

Mitglied
Hi,

ich möchte mir anzeigen lassen, wie weit eine Berechnung fortgeschritten ist. Ich habe dazu ein Array in dem Zugriffsanzahlen für Datumseinheiten gespeichert sind z.B. Daten[2007231116].

Um alle diese Daten zu initialisieren braucht es einige verschachtelte Schleifen und natürlich bisschen Zeit.

Dazu habe ich versucht den Balken direkt in der Schleife zu vergrößern. Das funktioniert auch, allerdings erst wenn der Ladevorgang abgeschlossen ist. Ich möchte aber, dass sich der Ladebalken während des Ladens bzw. währen des Schleifendurchlaufes mitverändert. Wie kann ich das das tun? Ich habe auch schon ein onEnterFrame
Event auf den Movieclip gesetzt. Allerdings bewirkt das das Selbe.

Hat jemand eine Idee?

Vielen Dank schonmal im Vorraus.

Mfg Joe
 
Hallo
afaic müsstest du die Schleife durch den onEnterFrame ersetzen - denn zwischen Schleifendurchläufen werden keine aktualisierungen des Angezeigten vorgenommen. Es wird immer alles ausgerechne tund dann das resultat angezeigt.

for(i = 0; i < 100; i++)
->
Code:
i = 0;
_root.onEnterFrame = function() {
if(i < 100) {
  i++;
 //...
} else {
 delete(this.onEnterFrame);
}
}

Gruß.
 
Das problem wird dann wohl sein, dass die Schleife nur in Geschwindigkeit der Framewiederholrate erhöht wird.

Meine Schleife sieht so aus:

Code:
root.preload_inkrement_handler = (((100/XMLdaten.firstChild.childNodes.length)/12)/30)/24;
    _root.preload_ges;
    for(var jahr = 0; jahr < XMLdaten.firstChild.childNodes.length; jahr++)
    {
        jahr_besch1[jahr] = XMLdaten.firstChild.childNodes[jahr].attributes.datum;
        daten[jahr] = new Array();        //jahr schleife    
        
        for(var monat= 0; monat < XMLdaten.firstChild.childNodes[jahr].childNodes.length; monat++)
        {    
            daten[jahr][monat] = new Array();    //monats schleife
            for(var tag = 0; tag < XMLdaten.firstChild.childNodes[jahr].childNodes[monat].childNodes.length; tag++)
            {
                daten[jahr][monat][tag] = new Array(); //tag schleife
                for(var stunde= 0; stunde < XMLdaten.firstChild.childNodes[jahr].childNodes[monat].childNodes[tag].childNodes.length; stunde++)
                {
                    daten[jahr][monat][tag][stunde] = XMLdaten.firstChild.childNodes[jahr].childNodes[monat].childNodes[tag].childNodes[stunde].attributes.hits;
                    // Berechnung --
                    ntag = add_null(tag+1);
                    nmonat = add_null(monat+1);
                    nstunde = add_null(stunde+1);
                    _root.daten_indexed[jahr_besch1[jahr]+nmonat+ntag+nstunde] = Number(daten[jahr][monat][tag][stunde]);
                    _root.preload_ges = preload_ges + _root.preload_inkrement_handler;
                }
            }
        }
    }

Das Problem ist, dass aufgrund der Menge der zu verarbeitenden Daten schonmal gut 50000 Schleifendurchläufe zusammenkommen. Kann ich die onEnterFrame Rate irgendwie festlegen?

Mfg Joe
 
Hi,

ich würde daher nur alle 100 oder 1000 Durchläufe einen Frameaufruf setzen:
Code:
var current = 0;

var res = 500; // alle 500 Durchläufe einen Frame weiter

function schleife() {
  var last = Math.min(arr.length, current + res);
  while (current < last) {
    berechnen(current);
    current ++;
  }
  this.onEnterFrame = function() {
    // Ladebalken hier aktualisieren
   schleife(); 
}

Dieser Code bezieht sich allerdings nur auf eine Schleife - bei Verschachtelungen sähe die Sache ein klein wenig komplizierter aus.

Alternativ könntest Du statt onEnterFrame auch setInterval in Kombination mit updateAfterEvent verwenden.

Gruß
.
 
Zurück