02. april 2005 - 18:58Der er
12 kommentarer og 1 løsning
flash:problemer med variabler skaber lyd inferno
Hej, Jeg har en flash film med 3 frames - en til tre forskellige situationer. Når man er under en frame kan skifte imellem de forskellige situationer (man vælger imellem tre foskellige baggrundssymboler) Til hver baggrunden hører en serie af speaks. Disse speaks er i mp3 filer som bliver loadet ind med nedenstående script.
function randRange(min:Number, max:Number):Number { var randomNum:Number = Math.round(Math.random()*(max-min))+min; return randomNum; }
randomtid = randRange(22000, 30000);
var randomlyd:Sound = new Sound(); function spilMP3 () {randomlyd.loadSound("speakda/mall/"+randRange(10, 20)+".mp3", true);}
function callback1() { trace("interval called"); trace(randomtid); trace("speakda/mall/"+randRange(10, 20)+".mp3") randomtid = randRange(22000, 30000); spilMP3 (); var interval = setInterval(callback1,randomtid); clearInterval(interval); }
var interval = setInterval( callback1, randomtid );
Og det fungerer fint. Problemet er at til hver baggrunden af der som sagt en selvstændig serie af speaks den skal hente ind, så den kode ligger i alle tre frames (selvfølgelig med en forskelig mappe den refererer til). Det er altså kun
function spilMP3 () {randomlyd.loadSound("speakda/mall/"+randRange(10, 20)+".mp3", true);}
som ændres imellem de tre frames
Problemet opstår når man skifter imellem de tre situationer.. For det der sker når man hopper over i en ny frame er at den bliver ved med at spille de gamle lyde og så også de lyde. Når man så har skiftet et par gange, afspiller den lydende fra alle frames og dermed bliver det et stort inferno af lyde...
JEg troede egentlig at når man kig ind i en ny frame "overskrev" den den gamle og blot spillede de ny...
Hvordan løses dette problem - har prøvet at lave en delete randomlyd; når man kommer ind i framen, men dette kunne jeg ikke få til at du.
Jeg skal på en eller anden måde få slettet den tidligere kode, således den kun kører den nye kode..
Bare fordi du sletter et lydobjekt (eller overskriver det), så stopper lyden ikke.
Du skal stoppe den med:
randomlyd.stop();
Meeen, når nu du selv så præcist siger, at du har det samme script stort set ens tre gange - så kan du vel også regne ud, at det kan gøres meget pænere. Du skal jo kun definere alle dine funktioner og dit lydobjekt 1 gang - så kan du jo bare loade lyde ind i det i hver af de tre frames - men så de alle bruger samme lydobjekt.
Okay - det er dog lige en ekstra ting. Det er sådan at der før disse tre frames, ligger der en intro hvor man vælger hvilken baggrund man vil have og derfor kan jeg ikke stoppe denne overstående kode i den første frame, idet der i introen ikke skal hentes speak i denne frame.. Hvilken del af koden kan jeg smide ud i introen, er det alt på nær
var folder = "speakda/nogetandet/"; spilMP3();
Problemet som jeg ser det er jo at i første frame skal den ikke spille noget - men blot definere tingene??
okay jeg har gjort overstående som jeg skrev og det eneste som ligger i de tre frames er så:
var folder = "speakda/nogetandet/"; spilMP3();
Problemet på denne måde er at den så fint spiller lyden når den kommer ind i frames'ene, men den bliver ikke ved med at spille en lyd - den afspiller kun lyden engang - koden er skrevet således at den skal spille en ny lyd hvert (22-30) sekund.
JEg har så prøve at ændre i
function spilMP3 () { randomlyd.stop(); randomlyd.loadSound(folder+randRange(10, 20)+".mp3", true); callback; }
således den også indeholder callback funktionen - men det kan jeg ikke rigtigt for til at virke.. har du en ide om det??
nu kom vi da et stykke af vejen - problemet er stadgivæk at hvis man lader den stå i et par minutter begynder intervallet imellem hvergang den afspiller lyden at blive mindre og mindre - og til sidst lyder det bare som om en et sandt lyd inferno. Den loader nærmest en ny fil ind hver 20 milliskund.. Fejlen må ligge i callback1 tror jeg, kan du se hvad der kan være galt?
Er du sikker på, at du ikke har setInterval og clearInterval i forkert rækkefølge - først clearer du det gamle, derefter laver du det nye. Den har du fejlet med et par gange :)
fedt rigtig fedt - det er sku da utrolig hvad et var kan gøre.. Godt så lige det aller sidste - når jeg trykker på mit speaker ikon der deaktiverer min baggrundslyd så skal den også deaktivere speakning.
Dette gør jeg vel bare med _root.randomlyd.stop();
når jeg så skal starte den igen - er det så blot _root.randomly.start();??
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.