30. marts 2005 - 19:01Der er
12 kommentarer og 1 løsning
Random funktion med pulje
Jeg har før fået hjælp til følgende funktion.
function randRange(min:Number, max:Number):Number { var randomNum:Number = Math.round(Math.random()*(max-min))+min; return randomNum; } randomtid = randRange(1000, 3000); var randomlyd:Sound = new Sound(); function spilMP3 () { randomlyd.loadSound(randRange(1, 3)+".mp3", true); } function callback1() { trace("interval called"); trace(randomtid); spilMP3 (); randomtid = randRange(1000, 3000); clearInterval(interval); var interval = setInterval( callback1, randomtid ); } var interval = setInterval( callback1, randomtid );
Den virker også rigtig fint. Men jeg ønsker at udvide den lidt. Der er x antal filer. Den vælger f.eks. random mellem 10 forskellige lyde. Men den skal ikke kunne spille de samme sange 2 gange efter hinanden.
Så der skal laves en pulje på de 10 sange. Når den så har spillet sangen skal den fjerne den fra puljen, og herefter tjekke om den findes i puljen, inden den spiller. Filerne hedder fra 1 til 10.mp3. Når alle 10 filer er blevet afspillet, skal puljen resettes, og møllen skal startes igen.
Hvordan gøres dette smartest. Jeg havde forestillet mig noget med et aray. Men er dette det smarteste?
Jeg spurgte engang efter hjælp til at rafle indholdet i en array og fik denne glimrende løsning: www.eksperten.dk/spm/182010 - det burde kunne hjælpe dig lidt på vej.
Mjaejooe... men, hvis du nu har et array med fx sang 0-9 og du rafler arrayet, så kan du jo bare loope igennem det og trække sangene ud på den måde? Så vil ingen af dem jo blive spillet igen, men de vil hver gang være blandet, fordi du rafler arrayet. Det var sådan set dét jeg mente med mit forslag...
Ja, altså du laver jo som sagt dit array, bestående af navnene på sangene. Så bruger du koden fra mit link til at rafle sangene og så gafler du ganske enkelt element nummer 1 ud af arrayet, spiller den og fortsætter med 2,3,4 osv. op til slutningen af arrayet. Sangene vil jo være blandet rundt i arrayet, så du er sikker på at de spiller tilfældigt uden at gentages.
Hvis du looper det raflede array igennem, altså bruger en tæller, der går fra 0 til 6 og hiver det respektive navn ud, så går det jo af sig selv. Der skal ikke fjernes noget, bare loopes.
Det har du faktisk ret i. Jeg skal bare blande arrayet når alle sangene er blevet spillet. Men det kan jo gøres ved en simpel varibel der tæller... Tak for svaret. Kom med et svar, så får du nogle point. Der kommer nok en tråd senere, hvis der skal trouble shootes på mit script :-)
Jeg tænker bare på en varibel, der bliver plusset med én hver gang der er blevet spillet en lyd. Når den når 6, skal arrayet blandes, og variablen skal tilskrives værdien 0. Håber du forstår hvad jeg mener... er ikke helt sikker på jeg selv gør.
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.