Avatar billede pyroman Nybegynder
09. november 2003 - 18:44 Der er 6 kommentarer og
1 løsning

getTotalBytes() på flere lyde

Når jeg henter flere lyde ind i flash med loadSound() og derefter prøver at finde ud af hvor meget de fylder med getBytesTotal(), så finder først hvad den første fil fylder - når den så er helt hentet så finder den hvad den næste fylder osv - OG DET SKAL DEN IKKE!!!! Kan man på nogen måde undgå dette?????????????

På forhånd tak...

/Filip
Avatar billede basementjack Nybegynder
14. november 2003 - 21:37 #1
Har du selv scripted at den skal det, evt. læg dit actionscript op sammen med spm så vi ved hvad du snakker om.. ;)
Avatar billede pyroman Nybegynder
16. november 2003 - 16:47 #2
selfølig...

I _root:

varsLoaded = false;
names = new LoadVars();
names.load("names.txt");
names.onLoad = function(success) {
    if (success) {
        _root.sounds = new Array(names.name1, names.name2, names.name3, names.name4, names.name5, names.name6);
        trace(sounds);
        for (i=0; i<6; i++) {
            _root[_root.sounds[i]] = new Sound();
            if (sounds[i] != "") {
                _root[_root.sounds[i]].loadSound(_root.sounds[i]+".mp3");
            }
        }
        varsLoaded = true;
        gotoAndPlay(2);
    }
};

På MC'et "loading bar":

onClipEvent(enterFrame){
    if(_root.varsLoaded){
        totalBytes = 0;
        loadedBytes = 0;
        for(i2=0;i2<6;i2++){
            _root["sl"+i2] = _root.sounds[i2]+" - "+_root[_root.sounds[i2]].getBytesTotal();
            totalBytes += _root[_root.sounds[i2]].getBytesTotal();
            loadedBytes += _root[_root.sounds[i2]].getBytesLoaded();
        }
        totalBytes += _root.getBytesTotal();
        //totalBytes = _root.names.totalBytes;
        loadedBytes += _root.getBytesLoaded();
        loadedPercent = Math.floor(loadedBytes/totalBytes*100);
        this.mask._xscale = loadedPercent;
        if(loadedPercent >= 100){
            _root.gotoAndStop("start");
        }
    }
}
Avatar billede basementjack Nybegynder
16. november 2003 - 17:02 #3
Well.. Hvis jeg forstår spm'et rigtigt, så skal loadbar'en kun måle på den første lyd, så ville jeg da sige at du bare skal fjerne for-loopen på loading bar. Så det bliver:
while (sound1.getBytesTotal = sound1.getBytesLoaded) {
  //script til at ændre din bar i forhold til loadedPercent..
}
//loadSound for resten udenom loading bar..
Avatar billede pyroman Nybegynder
16. november 2003 - 18:08 #4
Nej - jeg har de der 6 lyde, og som du kan se i første script bliver de hentet ind med loadSound(). For-løkken er til at finde totalBytes og LoadedBytes for hver lyd i hvert frame - totalBytes burde være den samme, men den bliver først indlæst for nogle af lydene efter et stykke tid.
Prøv fx at se på www.desi-dev.dk/Flash/mixer/mixer2.html
Loadingbaren går frem og springer tilbage...
Avatar billede basementjack Nybegynder
16. november 2003 - 18:20 #5
onClipEvent(enterFrame){
    if(_root.varsLoaded){
        alleBytes = 0;
        nuBytes = 0;
        for(i2=0;i2<6;i2++){
          alleBytes =+ _root[_root.sounds[i2]].getBytesTotal();
        }
      nuBytes += _root.getBytesLoaded();       
      loadedPercent = Math.floor(nuBytes/alleBytes*100);
        this.mask._xscale = loadedPercent;
        if(loadedPercent >= 100){
            _root.gotoAndStop("start");
        }
    }
}

Så finder den først størrelsen på alle de lyde der skal loades, og så finder den forholdet mellem det og hvad den har fået loadet ind.
Så skulle loading baren ikke springe frem og tilbage..
Avatar billede pyroman Nybegynder
17. november 2003 - 14:25 #6
Hmm, jeg tror altså stadigvæk ikke at flash kan finde ud af hvor meget lydene fylder hurtigt nok. Jeg lavede en test, hvor nogle displays viste hvad total bytes var for de enkelte lyde. Når jeg uploadede den, viste det sig at disse værdier kom ind lidt efter lidt, og ikke med det samme man begyndte at loade...!!!

Altså hvis det er sådan at lydene indgår i _root.getBytesLoaded(), så burde dit script hjælpe lidt på det, for så har jeg jo lagt alle lydenes fylde sammen to gange - og det er jo lidt af en fejl!

Kigger lidt på det...
Avatar billede pyroman Nybegynder
11. februar 2004 - 18:53 #7
hehe - 3 år efter: nu har jeg kigget lidt på det...

basementjack > Nej desværre den går ikke. Når man henter externe filer ind i flash påvirker de ikke getBytesLoaded og getBytesTotal på andet end det mc de bliver hentet ind i - derfor kan man ikke bruge _root.getBytesLoaded() - den er konstant...
Ked af det...

Kom i tanke om dette spm - fordi jeg netop lige har løst problemet i en anden sammenhæng... ret simpelt egentligt:

onClipEvent(enterFrame){
    if(_root.varsLoaded){
        alleBytes = 0;
        nuBytes = 0;
        totalLoaded = true;
        for(i2=0;i2<6;i2++){
          alleBytes += _root[_root.sounds[i2]].getBytesTotal();
          nuBytes += _root[_root.sounds[i2]].getBytesLoaded();
          if(alleBytes < 1) totalLoaded = false;
        }   
        loadedPercent = Math.floor(nuBytes/alleBytes*100);
        this.mask._xscale = loadedPercent;
        if(loadedPercent >= 100 && totalLoaded){
            _root.gotoAndStop("start");
        }
    }
}
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester