Zurück   Flashforum > Flash > ActionScript > ActionScript 1

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 24-11-2003, 18:02   #1 (permalink)
Neuer User
 
Registriert seit: Jul 2001
Ort: Munich
Beiträge: 194
dyn. downl:(oad mp3 / lösung / bugs

hi all,
ich habe mal das halbe weekend für euch geopfert (schleim) :) eine lösung der div. downloadprobleme bei dynamischen mp3s zu begegnen. im grunde habe ich folgende ziele im auge:

1. dynamisches laden sowie nachladen bis x mp3's
2. erster track soll automatisch gestartet werden (unendlicher loop)
3. mp3s werden als EVENTS geladen (kein streaming)
4. buttons bzw. mc's die auf der hauptbühne liegen, sollen erst (nacheinander) nach erfolgreichem download auf "visible" gestzt werden (werden bein stage.onLoad, auf _visible = false) gesetzt.

das beispiel umfasst jetzt 2 mp3s später soll diese zahl jedoch dynamisch sein...

das skript steht IM ERSTEN FRAME, es gibt auch keine weiteren frames und nur drei MCs sowie ein Textfeld auf der hauptbühne, das wars :)

ActionScript:
  1. function soundLoader(which) {
  2.     _root.which = which;
  3.     preloading = true;
  4.     movieObj = "mysound"+which; //string (achtung: basistypen werden nicht automatisch als referenz abgelegt!
  5.     movieMc = "mysoundmc"+which;
  6.     this[movieObj] = new Sound(); //movieObj wird [object]
  7.     this[movieObj].loadSound(which+".mp3", false);
  8. }
  9. this.onLoad = function() {
  10.     mcbalken._xscale = 0;
  11.     mysoundmc1._visible = false;
  12.     mysoundmc2._visible = false;
  13.     soundLoader(1);
  14. };
  15. this.onEnterFrame = function() {
  16.     if ( which > 0 ) { //falls intern noch nicht deklariert
  17.     stotal = this[movieObj].getBytesTotal();
  18.     sloaded = this[movieObj].getBytesLoaded();
  19.     sloading = Math.round((sloaded/stotal)*200);
  20.     }
  21.     if (preloading == true && sloading>5 && which > 0) {
  22.         loadedTxt = "% : "+sloading;
  23.         mcbalken._xscale = sloading;
  24.         if (sloading>=100) {
  25.             if (which == 1) { //erster track automatisch beginnen
  26.                 this[movieObj].start();
  27.             }
  28.             eval(movieMc)._visible = true; //track-buttons sichtbar machen, wenn geladen
  29.             if (which == 2) { //nach 2 songs schluss
  30.                 //loadedTxt = "fertig geladen";
  31.                 delete this.onEnterFrame; //wenn projekt fertig
  32.             }
  33.            
  34.             soundLoader(++which);
  35.         }
  36.     }
  37. };

ich denke, dass das script soweit relativ verständlich ist, oder?

mein laden von 2 mp3s (jeweils etwa 400 kb gross) funzt soweit (auch lokal funzt es und online). der balken wird korrekt verändert, die prozentanzeige stimmt und im explorer 6.0 (win xp) wird alles korrekt angezeigt und ausgeführt sowie gestartet.

auch bei einem reload (im gegensatz zu diesem thread: loadSound und Streaming Probleme -- HILFE!) wird im ie 6 der sound korrekt erneut gestartet (ok ist auch kein stream-prob), aber im mozilla wird bei mir SOFORT alles angzeigt, balken auf 100%, beide mc's, obwohl ich bswp. im script folgenden "bug" (?) von mozilla abfange, es geht darum aktionen erst ab 4 kb der getBytes-Informationen auszuführen, hilft leider nicht weiter..ich habe jetzt auch mozilla 1.5 downgeloaded und verwende dort flash-player 7, (auch im ie 6 flash-player 7), auf opera geht es beim ersten besuch dagegen schon, beim erneuten besuch MUSS man jedoch reloaden (!), allerdings wird der erste fertig geladene sound NICHT automatisch gestartet UND obwohl mein zweiter button angezeigt und damit das mp3 scheinbar ganz geladen wurde (wir sind noch im opera), kann man erst nach einer längeren weile sound 2 (per mausklick auf button 2) aktivieren! :(

scheint also auch rumzubuggen, opera 7.11 und flash-player 7....soo mit opera 7.23 und flash-player 7 funzt es auch nicht besser (wie erwartet).

hat jemand zu diesem thema hilfe anzubieten? ist mein script eventuell nicht sauber genug? freue mich über jegliche ansätze :)
danke soweit und danke für euren einsatz :)
timo

Geändert von method5 (24-11-2003 um 18:03 Uhr)
method5 ist offline   Mit Zitat antworten
Alt 24-11-2003, 18:13   #2 (permalink)
.--. .. ..- ...
 
Benutzerbild von pius
 
Registriert seit: Jul 2002
Ort: munich
Beiträge: 1.345
probier mal ...

ActionScript:
  1. this.__init = function() {
  2.         mcbalken._xscale = 0;
  3.         mysoundmc1._visible = false;
  4.         mysoundmc2._visible = false;
  5.        this.onEnterFrame = this.__controller;
  6.         soundLoader(1);
  7. };
  8.  
  9. this.__controller = function() {
  10.         if ( which > 0 ) { //falls intern noch nicht deklariert
  11.                 stotal = this[movieObj].getBytesTotal();
  12.                 sloaded = this[movieObj].getBytesLoaded();
  13.                 sloading = Math.round((sloaded/stotal)*200);
  14.         }
  15.         if (preloading == true && sloading>5 && which > 0) {
  16.                 loadedTxt = "% : "+sloading;
  17.                 mcbalken._xscale = sloading;
  18.                 if (sloading>=100) {
  19.                         if (which == 1) { //erster track automatisch beginnen
  20.                                 this[movieObj].start();
  21.                         }
  22.                         eval(movieMc)._visible = true; //track-buttons sichtbar machen, wenn geladen
  23.                         if (which == 2) { //nach 2 songs schluss
  24.                                 //loadedTxt = "fertig geladen";
  25.                                 delete this.onEnterFrame; //wenn projekt fertig
  26.                         }
  27.                        
  28.                         soundLoader(++which);
  29.                 }
  30.         }
  31. };
  32.  
  33. this.onEnterFrame = this.__init;
__________________
one out of many
pius ist offline   Mit Zitat antworten
Alt 24-11-2003, 18:42   #3 (permalink)
Neuer User
 
Registriert seit: Jul 2001
Ort: Munich
Beiträge: 194
feedback

erstmal danke.
tut sich jedoch leider nichts, ich kann es auch nicht nachvollziehen, wird this.__init nicht ständig ausgeführt und überschreibt sich somit selbst? der screen bleibt folgerichtig komplett weiss bzw. einmal sieht man die elemente kurz. hmm. beispiel hier: (http://music.nachtagenten.de/T.html), desweiteren: hier mein beispiel: http://music.nachtagenten.de/new.html

any more ideas? ) pls pls
method5 ist offline   Mit Zitat antworten
Alt 24-11-2003, 20:04   #4 (permalink)
Neuer User
 
Registriert seit: Jul 2001
Ort: Munich
Beiträge: 194
Question LÖSUNGSANSATZ

Hi liebe Gemeinde,
nach einige Recherchen bin ich nun zum temporären Fazit gekommen, dass die onLoad-"Geschichte, also die Abfrage des Initialisierens der Bühne per "this.onLoad", " irgendwie nicht astrein funktioniert.

Ich habe jetzt das ganze downgegraded und rufe die Initialbefehle einfach im ersten Frame direkt auf (ohne onLoad-Eventhandler), jetzt funktioniert mein Preload-Skript auch auf Mozilla und Opera sowie die alten Netscape4er auf Windows und auch auf Opera (6.03), Netscape 7 und IE 5.01 auf Mac OS X, sprich die Funktionalität ist nun gewährleistet, da bin ich erstaunt das das jetzt geht.

Sporadische Probleme bereitet leider der automatische Start der hin und wieder geht und hin und wieder nicht, jedoch tritt dieses Problem nicht auf Explorer 6 auf Windows auf, sodass ich ungefähr 85% der User im Boot haben dürfte ;)

Ich bin jedoch nach wie vor am Verbessern des Skriptes und freue mich auf Vorschläge, dass Ding sauber zu coden, denn so gefällt es mir überhaupt nicht, was mir gefällt ist, das ich ein komplett dynamisches mp3 preload-skript habe was ein einem einzigen Frame ist (übersichtlich, smart) aber sonst ist mein Wissen unter aller Sau :(

Danke für die Hilfen
timo

ActionScript:
  1. function soundLoader(which) {
  2.     _root.which = which;
  3.     preloading = true;
  4.     movieObj = "mysound"+which;
  5.     //string (achtung: basistypen werden nicht automatisch als referenz abgelegt!
  6.     //mx 2004 style
  7.     //movieObj = Object("mysound"+which);
  8.     movieMc = "mysoundmc"+which;
  9.     this[movieObj] = new Sound();
  10.     //movieObj wird [object]
  11.     this[movieObj].loadSound(which+".mp3", false);
  12. }
  13. this.onEnterFrame = function() {
  14.     if (which>0) {
  15.         //falls intern noch nicht deklariert
  16.         stotal = this[movieObj].getBytesTotal();
  17.         sloaded = this[movieObj].getBytesLoaded();
  18.         sloading = Math.round((sloaded/stotal)*100);
  19.     }
  20.     if (preloading == true && sloading>5 && which>0) {
  21.         loadedTxt = "% : "+sloading;
  22.         mcbalken._xscale = sloading;
  23.         if (sloading>=100) {
  24.             if (which == 1) {
  25.                 //erster track automatisch beginnen
  26.                 this[movieObj].start(0, 999);
  27.             }
  28.             eval(movieMc)._visible = true;
  29.             //track-buttons sichtbar machen, wenn geladen
  30.             if (which == 2) {
  31.                 //nach 2 songs schluss
  32.                 //loadedTxt = "fertig geladen";
  33.                 delete this.onEnterFrame;
  34.                 //wenn projekt fertig
  35.             }
  36.             soundLoader(++which);
  37.         }
  38.     }
  39. };
  40. mcbalken._xscale = 0;
  41. mysoundmc1._visible = false;
  42. mysoundmc2._visible = false;
  43. soundLoader(1);
method5 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 07:43 Uhr.

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


Copyright ©1999 – 2012 Marc Thiele