okay - kan man evt. lave det lidt smartere så den blot checker om mit lydobjekt spiller. Det jeg ønsker at hvis mit speaker ikon står på en bestemt frame (1) så er den tændt og hvis den står i et andet (34) så er den slukket... Så det jeg ønsker er at mit lydobjekt kun skal starte hvis det står i frame 1. Jeg kan dog ikke få dette til at du og jeg har ligledes prøvet at deklarere en variable der hedder lyden som enten er ja eller nej, afhængigt af om den spiller eller ej, men dette kan jeg heller ikke få til at fungere, så jeg ønsker at lave en hvis sætning der checker om der bliver afpsillet noget lyd i objeketet s
Kan man konstuere en sådan if(hvis lyden spiller) sætning og derefter få den til at køre mit soundobjekt?????
nedenstående kode anvender jeg nu. HEr har jeg deklareret en variable lyden i et underliggende movieclip. Problemet er at jeg ikke kan trace værdien af denne variable ud, selvom jeg er 100% sikker på at jeg har angivet den rigtige sti
har prøvet med trace(lyden); trace(this.asstwo.speaker.lyden) trace(_root.this.asstwo.speaker.lyden) og ligegyldigt hvad så får jeg en undefined property
if(this.asstwo.speaker.lyden == "ja"){
var s:Sound = new Sound(); _root.s.onSoundComplete = function() { this.loadSound("sound/mall_1.mp3", true); } s.onSoundComplete(); this.s.setVolume(60); trace("okajklfdasdkjfkjlfdsy");
Det smarteste ville nu være at du proppede alt det her script ind i dit lydikon så det dermed styrede lyden selv. Så kan man bare have nogle funktioner inden i den (eller måske på en _global.Jukebox):
var tændt = true; var lyd = new Sound(this); _global.Jukebox = new Object(); Jukebox.stream = function(fil, gentag) { if (tændt) { lyd.loadSound(fil, true); if (gentag) { lyd.onSoundComplete = function() { this.loadSound(fil, true); }; } } } Jukebox.lydstyrke = function(værdi) { if (værdi !== undefined) { lyd.setVolume(værdi); } return lyd.getVolume; }
DEt ligner bestemt noget af det jeg skal have gang i: Lad mig lige uddybe min situation
Min flash film har tre frames i hovedtidslinjen, en til hver af tre forskellige baggrunde. Til hver af disse baggrunde er der en tilhørende baggrundslyd. Man kan skifte imellem disse tre forskellige baggrunde ved at trykke på nogle ikoner i menuen. Problemet er at hvis man er inde på baggrund 1 og lyden begynder at spille (den skal automatiske starte med at streame og spille) hvis man så slår lyden fra og skifter baggrund (går f.eks. hen til frame 2) så skal den ikke begynde at spille den anden baggrundslyd, hvorimod hvis man har lyden tændt ved baggrundsbillede 1 og skifter frame, så skal den skifte til at spille baggrundslyd 2..
Jeg vil meget gerne oprette et nyt spg. med flere point hvis det er nødvendigt.
Så et oprids af hvad der skal ske
1) når man komme ind på en frame så skal den streame baggrundslyden hvis højtaler ikonet er positioneret et bestemt sted(eller har en bestemt værdi på en variable) og hvis den ikke er positioneret det sted så skal den kun streame lyden, men ikke afpsille den.
Der er jo ikke spor svært at lave - det tyder bare på, at du ikke har kunnet finde din variabel - hvor den så end har være sat henne af. Og det er sådan set bare det lille problem du skal have løst. Du kan alternativt smide den op på global - så kan du altid finde den:
trace("lyd: "+_global.lydStatus); if (_global.lydStatus == "ja"){ var s = new Sound(); s.onSoundComplete = function() { this.loadSound("sound/mall_1.mp3", true); } s.onSoundComplete(); s.setVolume(60); }
Så kan du bare i dit lydikon sætte den via _global.lydStatus="noget";
Ingen grund til at gøre tingene sværere end nødvendigt :)
så det må vel være stien til min _global.lydstatus der er noget galt med - kan den skrives på en anden måde. Troede egentlig at _global sikrede at den lå "over det hele"??
flash mx 2004.... Er lidt usikker på hvad du mener om jeg loader noget af det ind i hinanden ... Speakeren liggerp på hovedtidslinjen _root.asstwo.speaker ??
Det er så mærkeligt - når jeg deklarerer _global.lydstatus på hovedtidslinjen _global.lydstatus = "test"; og så tracer den ud, kan den sagtens finde det, men når lydstatus ligger i this.asstwo.speaker dur det ikke. Asstwo er et movieclip (min menu) og speaker er et movieclip (min speaker) - har du nogen anelse om hvad der sker??
Ikke andet end at jeg absolut ikke kan genskabe det og at der højst sandsynligt er tale om en simpel fejl - som jeg dog ikke kan deducere mig frem til givet de oplyste parametre. :)
det kan godt trace ud, så det må altså på en eller anden måde være når den skal ned to skridt asstwo og så speaker at det går galt - det virker til at _global ikke rigtigt fungerer for mig..?
jeg har ligeledes lavet et andet movieclip som ligger på hovedtidslinjen som har to frames, i den ene er _global.jukebox="one"; og i den anden ="two", denne kan jeg ligeledes ikke trace ud.
Fejlene må simpelthen ligge i at trace og _global skal ligge i samme frame... Hvordan kan det være, går hele ideen så ikke væk med global?
Debug videre - det fortsætter bare på samme måde. Lav et movieclip ved siden af, test om du kan lave variablen derinde, kopier noget af scriptet derover, se om det virker, kopier grafikken, se om det virker... Sådan er debugging :)
Hvordan laver du dit script? Jeg mistænker at du kalder trace før du sætter din globale variabel - hvorfor det selfølgelig ikke vil virke!
Hvis du både skriver trace på hovedtidslinjen og skriver trace inden du sætter din variabel - hvilken kommer så først? Hvis den fra hovedtidslinjen kommer først, så er det jo forklaringen - det er da åbenlyst?
Kanont, der var forklaringen så - men hvordan undgår jeg så dette.. Kan jeg fra hovedtidslinjen sikre at variablen er blevet kaldt, inden jeg kalder musikken.??
Altså helt i starten er lyden vel defineret til at være enten slået fra eller til? Det er vel ikke random fra gang til gang? Første gang behøver du da ikke teste den - der er den jo startværdien? Sidenhen vil den have en værdi - og så kan du teste for den.
Altså hvis den er undefined, så er den startværdien (som du kender).
min film har i frame 1 (som man kun ser engang) en mulighed for at vælge tre forskellige baggrunde (2,3,4) og ligegyldigt hvilken en man vælger skal den afspille lyden. Men når man så er under en bestemt frame, så kan man skifte til de andre baggrunde.. Så f.eks. hvis man starter i frame 2 og slukker lyden og går til frame 3 skal den ikke spille lyden... Men hvis man starter med at vælge frame 3 så skal den spille lyden..
Så
if (_global.lydStatus == "ja"){ var s = new Sound(); s.onSoundComplete = function() { this.loadSound("sound/mall_1.mp3", true); } s.onSoundComplete(); s.setVolume(60); }
den if sætning skal først køres når variablen lydstatus er derfineret i asstwo.speaker. Kan man på nogen måde sikre at den først er defineret før man kalder
if (_global.lydStatus == "ja"){ var s = new Sound(); s.onSoundComplete = function() { this.loadSound("sound/mall_1.mp3", true); } s.onSoundComplete(); s.setVolume(60); }
Altså du skal afspille lyden i alle situationer, hvor den ikke er "nej" (sådan kunne man jo bare omformulere det):
if (_global.lydStatus != "nej"){ var s = new Sound(); s.onSoundComplete = function() { this.loadSound("sound/mall_1.mp3", true); } s.onSoundComplete(); s.setVolume(60); }
ja, det er en mulighed - men den fucker stadigvæk lidt - nu har jeg lavet et alternativt setup. Nu har jeg lagt speakeren ud i frame 1, får jeg overhovedet kalder if (_global.lydStatus == "ja"), så de burde være deklareret før jeg spørg, og når jeg så laver den trace, siger den stadigvæk undefinded...
nu har jeg rokeret rundt og referet direkte til en ny variable _root.assthree.jukebox og deklareret under asthree var jukebox="ja"; og det fungerer. Men smid et svar, du har mere end fortjent dine point.. Mange tak for hjælpen
Det er ret simpelt - flash kan kun alve en ting af gangen.
Når den skal initialisere alt script i din film så starter den med alle framescripts i den aktuelle frame i din scene, derefter alle framescripts i den aktuelle frames i det først placerede movieclip herunder og så videre indtil alle childmovieclip under det første movieclip. Og så videre med det næste movieclip, det næste til alle movieclips rekursivt er kaldt. De bliver ikke kaldt samtidig - et af gangen.
Og flash starter yderst - med hovedscenens script først.
Men hvorfor spørge mig - du kan jo teste det med traces. Bare smid en trace ind i hver frame og se, hvad der kommer først.
Og jeg kan ikke se, hvorfor versionen med at det modsatte ikke må være tilfældet - det er perfekt og logisk for mig!
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.