Zurück   Flashforum > Flash > ActionScript > ActionScript 1

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 15-08-2005, 21:05   #1 (permalink)
tracer
 
Benutzerbild von andretti
 
Registriert seit: Jun 2004
Beiträge: 4.415
preloader: setInterval versus onEnterFrame

hatte bis heute ein mächtiges problem mit dem preloader;
vorgabe:
auch auf 56-k- Modem soll es funzen;
aber, hat net hingehauen, habe es mit onEnterFrame-preloading gemacht;
ist immer hängengeblieben der film;wenn er dann mal im cache war, hat's gefunzt;

dann, mit setInterval-preloading á la Rusty-Cake tutorial, hat es auch mit 56 k- Modem funktioniert;

bei mir(Breitband) hat es IMMER FUNKTIONIERT;

was ist der Unterschied zwischen setInterval(mit 10-Milisekunden-Aufruf) und onEnterFrame(Film hat 30 FPS eingestellt)????

edit:

der Interval-loader:
ActionScript:
  1. var villasfader = this;
  2. this.loader_funk = function() {
  3.     gesamt = villasfader.getBytesTotal();
  4.     bereits = villasfader.getBytesLoaded();
  5.     prozent = Math.ceil((bereits/gesamt)*100);
  6.     villasfader.MC_preloader.T_prozent.text = prozent+" %";
  7.     villasfader.MC_preloader.MC_loadCircle._alpha = 100-prozent;
  8.     villasfader.MC_preloader.MC_loadCircle._rotation += 5;
  9.     if (prozent == 100) {
  10.         villasfader.gotoAndStop(3);
  11.         clearInterval(loadID);
  12.     }
  13. };
  14. loadID = setInterval(loader_funk, 10);
der onEnterFrame-preloader:
ActionScript:
  1. var villasfader = this;
  2. Movieclip.prototype.preload = function() {
  3.     var totalBytes = _villasfader .getBytesTotal();
  4.     var prozent = 0;
  5.     this.T_prozent.autoSize = "center";
  6.     this.onEnterFrame = function() {
  7.         loadedBytes = _villasfader .getBytesLoaded();
  8.         prozent = Math.round(loadedBytes*100/totalBytes);
  9.         if (prozent<100) {
  10.             this.T_prozent.text = "loading..."+prozent;
  11.             this.MC_loadCircle._alpha = 100;
  12.             this.MC_loadCircle._rotation += 5;
  13.         } else {
  14.             this.T_prozent.text = "complete loaded...100 %";
  15.             this.MC_loadCircle._rotation = 0;
  16.             this.MC_loadCircle.onEnterFrame = function() {
  17.                 this._alpha>=0 ? this._alpha -= 10 : 0;
  18.             };
  19.             var iv = setInterval(function () {
  20.                 villasfader .nextFrame();
  21.                 clearInterval(iv);
  22.             }, 2000);
  23.             delete this.onEnterFrame;
  24.         }
  25.     };
  26. };
  27. MC_preloader.preload();
__________________
Viola per Sempre
Alle Angaben ohne Gewehr!
trace your open mind in variables !
andretti
ActionScript Dictionary

Geändert von andretti (15-08-2005 um 21:13 Uhr)
andretti ist offline   Mit Zitat antworten
Alt 15-08-2005, 22:32   #2 (permalink)
Neuer User
 
Registriert seit: Jul 2001
Beiträge: 126
...

hi,
das problem liegt nicht beim onEnterFrame sondern darin, daß du die totalBytes nur einmal zu beginn abfragst. dein dsl schafft es anscheinend, zwischen loadMovie() und preload() den ladevorgang zu starten und auch den getBytesTotal() zu bekommen, das kann aber bei einem langsamen server (damit meine ich die zeit zwischen request und antwort) auch mit dsl in die hose gehen.

richtig wäre zum Beispiel:


ActionScript:
  1. function preload(mc:MovieClip):Void{
  2. var part:Number=mc.getBytesLoaded();
  3. var total:Number=mc.getBytesTotal();
  4. var percent=Math.round(part/total*100);
  5.  
  6. if(percent==100 && total>4){
  7. onLoadReady();
  8. delete this.onEnterFrame;
  9. }
  10. }
  11.  
  12. this.onEnterFrame=preload(deinMc);
mploj ist offline   Mit Zitat antworten
Alt 15-08-2005, 23:18   #3 (permalink)
tracer
 
Benutzerbild von andretti
 
Registriert seit: Jun 2004
Beiträge: 4.415
ok
so ganz verstehe ich noch nicht, was Du meinst;
ich preloade aber keinen mc, der hereingeladen wird, sondern "_root", könnte auch so aussehen:
ActionScript:
  1. Movieclip.prototype.preload = function() {
  2.         var totalBytes = _root.getBytesTotal();
  3.         var prozent = 0;
  4.         this.T_prozent.autoSize = "center";
  5.         this.onEnterFrame = function() {
  6.                 loadedBytes = _root.getBytesLoaded();
  7.                 prozent = Math.round(loadedBytes*100/totalBytes);
  8.                 if (prozent<100) {
  9.                         this.T_prozent.text = "loading..."+prozent;
  10.                         this.MC_loadCircle._alpha = 100;
  11.                         this.MC_loadCircle._rotation += 5;
  12.                 } else {
  13.                         this.T_prozent.text = "complete loaded...100 %";
  14.                         this.MC_loadCircle._rotation = 0;
  15.                         this.MC_loadCircle.onEnterFrame = function() {
  16.                                 this._alpha>=0 ? this._alpha -= 10 : 0;
  17.                         };
  18.                         var iv = setInterval(function () {
  19.                                 root.nextFrame();
  20.                                 clearInterval(iv);
  21.                         }, 2000);
  22.                         delete this.onEnterFrame;
  23.                 }
  24.         };
  25. };
  26. MC_preloader.preload();
villasfader war nur die variable bezeichnung für _root, weil ich diese swf in eine andre reinlade;
der Movieclip is nur der Aufrufer, in dem halt auch die preloader-ani steckt;;
__________________
Viola per Sempre
Alle Angaben ohne Gewehr!
trace your open mind in variables !
andretti
ActionScript Dictionary
andretti ist offline   Mit Zitat antworten
Alt 16-08-2005, 09:13   #4 (permalink)
muh
 
Benutzerbild von Janoscharlipp
 
Registriert seit: Apr 2002
Ort: Freiburg / Stuttgart
Beiträge: 4.338
Wenn du einen Ladevorgang initiierst, ist bei langsamer Verbindung getBytesTotal undefiniert, oder -1 oder so.
Du musst also nicht nur getBytesLoaded, sondern auch getBytesTotal ermitteln.
Zudem musst du in der Abbruchsbedingung prüfen, ob getBytesTotal > 8 oder so ist, sonst bekommst du womöglich am anfang einen Abbruch, obwohl noch nichts geladen ist.

@ mploy
ActionScript:
  1. this.onEnterFrame=preload(deinMc)
geht so nicht, oder? Du würdest onEnterFrame den Rückgabewert des Funktionsaufrufs preload(deinMc) zuweisen.
Man kann von einem onEnterFrame keine Parameter erwarten, den zu überwachenden MC muss man anderswo speichern.
__________________
»Carpe diem«, sagte der Graf. (Terry Pratchett: Ruhig Blut!)
Janoscharlipp 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 03:49 Uhr.

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


Copyright ©1999 – 2012 Marc Thiele