Zurück   Flashforum > Flash > ActionScript > ActionScript 1

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 03-02-2006, 15:00   #1 (permalink)
************
 
Registriert seit: Jul 2001
Beiträge: 143
Question .getBytesLoaded() funzt nicht...

Hallo,

ich habe einen Preloader, der einfach nicht will. Obwohl er schon direkt aus nem Tutorial stammt und theroretisch alles okay ist, will er nicht.

PHP-Code:
// VORAUSLADEN
function postload() {    
    
_root.rahmen_mc.loadMovie("rahmen.swf"); // zu ladender Film
    
_root.at getTimer(); // timer für die zeitanzeige
    
do {
        
_root._root.rahmen_mc.getBytesTotal();
           
_root._root.rahmen_mc.getBytesLoaded();
        
_root.st getTimer(); // aktuelle Zeit
           
_root.rt Math.round((_root.st-_root.at)/1000);
           
_root.et Math.round((_root.t*_root.rt)/_root.g); 
           
_root.ct Math.round(-(_root.rt-_root.et));  
           
_root.= (_root.g/_root.t)*100;   
        
// definition der textanzeige
        
_root.loadtxt2 Math.round(_root.g/1024)+" Kb von "+Math.round(_root.t/1024)+" Kb geladen (= "+Math.round(_root.a)+" %)<br>Verbleibende Zeit: "+_root.ct+" Sekunden";  
        
_root.loadebene.loadbar.gotoAndStop(/:_root.a); // ladebalkenfilm
        
trace("t: "+_root.t);
        
trace("g: "+_root.g);;
    } while (
_root.g<_root.t);

    
// wenn alles erledigt ist: weiterspielen
    
_root.play();

Die Schleife wird einmal durchlaufen und das wars.

_root.t und_root.g haben bei Abfrage den Wert 10.
Der zu ladende Film hat aber rund 250kB und wird auch geladen. Nur der Loader will eben nicht.

Wenn ich als Alternative eine for-Schleife mit i<500 einsetze, sieht man, dass die Größenabfragen immer nur den Wert 10 ergeben.

Sieht jemand den Fehler?
zellteilung ist offline   Mit Zitat antworten
Alt 04-02-2006, 13:23   #2 (permalink)
agedoubleju
Gast
 
Beiträge: n/a
Schon mal unter "Suchen" nach Stichwort "Preloader" geschaut? Da wirst du Scripte mit kontinuierlichen onEnterFrame-Events oder setInterval-Funktionen finden...
  Mit Zitat antworten
Alt 04-02-2006, 16:01   #3 (permalink)
************
 
Registriert seit: Jul 2001
Beiträge: 143
Das Problem ist, dass das Ganze auch mit onEnterFrame nicht funktioniert. Auch nicht mit for-Schleifen oder ähnlichem. Ich habe mal einen Testmovie angelegt, in dem das Ganze so angelegt ist. Es funktioniert nicht.

Ich vermute, dass die Abfrage der Dateigröße erst mit Verzögerung passieren darf. Ein oder zwei Zeilen vorher genügt nicht.

Workaround, der funktioniert, aber nicht besonders elegant ist: Das ganze Skript liegt im zu ladenen swf und steuert von dort aus den Ladebalken auf der höheren Ebene. Aber auch hier darf die Abfrage der Größen nicht direkt in oder vor der Aktion/Bedingung erfolgen. Mindestens im Frame vorher muss das Ganze passieren, damit der Film sicher bei if(g<t) anhält.

Ich habe mal ältere Preloader angeschaut, die ich sonst einfach per Copy/Paste von Film zu Film übernehme. Dort ist es auch so. Die Abfrage kommt immer schon ein oder zwei Frames vorher (und dann natürlich in der Aktion auch nochmal).
zellteilung ist offline   Mit Zitat antworten
Alt 04-02-2006, 16:36   #4 (permalink)
................
 
Benutzerbild von Der Frager
 
Registriert seit: Jun 2004
Beiträge: 15.890
Hallo!

So sollte das klappen:
PHP-Code:
// VORAUSLADEN 
function postload() {
    
_root.rahmen_mc.loadMovie("rahmen.swf");
    
// zu ladender Film 
    
_root.onEnterFrame = function() {
        
_root.at getTimer();
        
// timer für die zeitanzeige 
        
_root._root.rahmen_mc.getBytesTotal();
        
_root._root.rahmen_mc.getBytesLoaded();
        
_root.st getTimer();
        
// aktuelle Zeit 
        
_root.rt Math.round((_root.st-_root.at)/1000);
        
_root.et Math.round((_root.t*_root.rt)/_root.g);
        
_root.ct Math.round(-(_root.rt-_root.et));
        
_root.= (_root.g/_root.t)*100;
        
// definition der textanzeige 
        
_root.loadtxt2 Math.round(_root.g/1024)+" Kb von "+Math.round(_root.t/1024)+" Kb geladen (= "+Math.round(_root.a)+" %)<br>Verbleibende Zeit: "+_root.ct+" Sekunden";
        
_root.loadebene.loadbar.gotoAndStop(_root.a);
        
trace("t: "+_root.t);
        
trace("g: "+_root.g);
        
// wenn alles erledigt ist: weiterspielen 
        
if (g>=&& g>10) {
            
delete _root.onEnterFrame;
            
_root.play();
        }
    };
}
postload(); 
__________________

ternärer Konditionaloperator

+++ Bitte keine Privat-Nachrichten bezüglich Flashfragen! +++
Der Frager ist offline   Mit Zitat antworten
Alt 04-02-2006, 16:48   #5 (permalink)
************
 
Registriert seit: Jul 2001
Beiträge: 143
Danke, aber was unterscheidet die onEnterFrame-Variante denn von "do-while"?
Die Bedingung g>10 würde doch auch dort gehen... oder übersehe ich da was?
zellteilung ist offline   Mit Zitat antworten
Alt 05-02-2006, 23:02   #6 (permalink)
************
 
Registriert seit: Jul 2001
Beiträge: 143
Habe es umgebaut und mit der onEnterFrame-Variante geht es.

Warum versteh ich nicht. Wo liegt der Unterschied? Prinzipiell ist doch auch onEnterFrame() nur eine Schleife...
zellteilung ist offline   Mit Zitat antworten
Alt 05-02-2006, 23:07   #7 (permalink)
meistens harmlos
 
Benutzerbild von rena
 
Registriert seit: Jun 2001
Ort: Stuttgart
Beiträge: 17.643
Mit dem Unterschied, dass bei onEnterFrame zwischen den
Durchläufen auch was passiert/angezeigt wird.
while- und for-Schleifen rechnen erst komplett bis zu deren
Ende durch und stellen dann erst dar.

Ohne jetzt die Frage im Detail nachvollzogen zu haben ...
Gruß
Rena
__________________
www.rena-hermann.de

The angels have the phone box
rena ist offline   Mit Zitat antworten
Alt 10-03-2006, 10:30   #8 (permalink)
User
 
Benutzerbild von kolumnen
 
Registriert seit: Jan 2002
Beiträge: 174
Zitat:
Zitat von zellteilung
Die Schleife wird einmal durchlaufen und das wars.
Dein mc, in den das swf geladen wird, hat vor dem Reinladen des swfs schon eine Größe, und die liegt wohl bei 10. Und damit ist die do-while-Bedingung beim ersten Durchlaufen der Schleife, noch bevor das Laden des swfs so richtig gestartet hat, schon erfüllt und die Schleife wird beendet.

Das onEnterFrame-Event wird hingegen permanent immer wieder aufgerufen, sobald das mc "aufgerufen" wird, in das das swf geladen wird. Und hört solange nicht auf damit, bis es wieder deleted wird.
kolumnen 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 14:31 Uhr.

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


Copyright ©1999 – 2012 Marc Thiele