forvaltning af lyde med kommandoer

, forvaltning af lyde med kommandoer,,,,, andel,,,,,,,,,,,,,,, det cyber - mandag envato tuts + kurser vil blive reduceret til $3.- og' t miss.,, forsvarlig forvaltning er meget vigtigt for mange former for flash - anvendelser, såsom interaktive websteder og lege.så længe du har lyst til at levere en rig interaktive oplevelse, vil du måske overveje at gøre brug af lydeffekter og baggrundsmusik.i denne lektion, jeg vil præsentere en minimalistisk sund forvaltningsramme, der forvalter lyder i gode spor.og jeg vil vise, hvordan vi kan integrere den sunde rammer med kommando ramme fra min tidligere tutorials.,,,, indledning, jeg har leget med uforsigtig forsvarlig forvaltning, og som nedbryder bruger erfaring.har du nogensinde spillet et spil, sige, at en aktion, spil, hvor karakter er sikkert stemme spiller, før den foregående stemme slutter, overlapper hinanden.det er et resultat af dårlig forvaltning: der bør ikke være mere end én stemme af samme karakter spiller på et tidspunkt.en forsvarlig forvaltning ramme, jeg er ved at dække vil tage sig af dette spørgsmål ved at lyde med lydspor. eksemplerne i denne forelæsning gøre brug af kommando - rammer og scene forvaltning fra min tidligere lektion, at ordrer (del 1, del 2), og de eksempler, også anvende dataadministrator klasse fra - data med ordrer.jeg anbefaler, at du går igennem disse tutorials, før nu.du vil også have greensock tweening platform til at fuldføre de eksempler,.,, trin 1: teori lyder spor, lydspor, vi taler om her, har intet at gøre med spil eller film lydspor.et sundt spor er en imaginær "spor" i forbindelse med en afspilning af en enkelt lyd.en indre lydspor ikke tillader mere end en god spiller på et tidspunkt.hvis et sundt spor er for øjeblikket spiller en lyd, siger man, det er optaget.hvis en anden lyd er til at spille på et besat lydspor, som for øjeblikket spiller lyd er stoppet, og så er den nye spiller på banen.det er derfor rimeligt at spille én rolle er stemmer på en indre lydspor, således at de sunde overlappende spørgsmål nævnte tidligere.i de fleste tilfælde også bør der kun være en spore til baggrundsmusik. lad os tage et kig på nogle begrebsmæssige tal.en enkelt ansøgning, kan have flere gode spor.,, hver lydspor kan holde en enkelt spiller lyd.,, hvis en forsvarlig skal spilles på en besat spor, er den "gamle" lyder er stoppet, og så de "nye" lyder spiller på banen.,, trin 2: teorien ramme, sund forvaltningsramme consistes to klasser, soundmanager, klasse og, lydspor, klasse.hver lydspor tildeles et unikt centrale snor.en besat lydspor underliggende spiller sound faktisk er en indfødt soundchannel objekt, der hidrører fra de indfødte lyd. play() metode, og det, soundmanager, klasse forvalter lydspor og tilrettelægger afspilning af musik. her er nogle hurtige forpremierer med anvendelse af rammebestemmelserne.følgende kode spiller en ny lyd på et solidt spor, der er forbundet med de vigtigste klynge "musik", hvor mysound, er en god klasse fra biblioteket. //spille en lyd om "musik" spor soundmanager. spille ("musik", nye mysound()); hvis den samme linje i kode henrettet igen, før den er færdig, den oprindelige lyd er stoppet, og en ny lyd spilles på "musik" spor. //- oprindelige lyder på "musik" spor og spille en ny soundmanager. spille ("musik", nye mysound()), soundmanager. stop(), metode forhindrer lydspor, der er forbundet med en bestemt nøgle snor. //- musik "lydspor soundmanager. stop (" musik "), med henblik på at omdanne lyd, ligesom at justere mængden, vi bliver nødt til at få en henvisning til enlydspor grundlæggende sund kanal.henvisningen kan opnås ved at få adgang til, soundtrack.channel, ejendom, var kanal: soundchannel = soundmanager. getsoundtrack ("musik"). kanal var omdanne: soundtransform = channel.soundtransform; transform.volume = 0, 5; channel.soundtransform = omdanne;,, trin 3: klasser soundtracket klasse, nok teori.lad os gå ned til kodning.vi skal bruge forskellige vigtige betingelser, for at skelne mellem forskellige gode spor.her er de, lydspor, klasse, som i det væsentlige er en vigtig kanal to.detaljer er beskrevet i bemærkninger., pakke lyder (import flash.media.soundchannel; /* * * et sundt spor er en vigtig kanal to.* /offentlige klasse "(//rom afgørende værdi private var _key: string; offentligheden få key(): string (tilbage _key;} //kun forsvarlig kanal reference private var _channel: soundchannel; offentligheden få channel(): soundchannel {tilbage _channel;} offentlige funktion" (key: string, kanal: soundchannel) (_key = nøglen. _channel = kanal;} /* * * stopper de underliggende lyder kanal.* /offentlige funktion stop(): ugyldig (_channel. stop();}}}, trin 4: klasser soundmanager klasse, og her er det, soundmanager, klasse.bemærk, at de afgørende spor sammenslutning håndteres ved hjælp af ordbogen klasse.en sang er tømt automatisk, hvis en spiller lyd har nået sin afslutning, pakke lyder (import flash.events.event; import flash.media.sound; import flash.media.soundchannel; import flash.media.soundtransform; import flash.utils.dictionary; /* * * i denne klasse, kan du styre det lyder i form af lydspor.* /offentlige klasse soundmanager (//en ordbog, der holder spor af lydspor menig static var _soundtracks: ordbog = nye dictionary(); //en ordbog, der kort en forsvarlig kanal til dens tilsvarende afgørende for gennemførelsen af den private statisk var _soundkeys: ordbog = nye dictionary(); /* * * spiller en sund og returnerer et tilsvarende lydspor objekt.* /offentlige statisk funktion spiller (nøgle: string, lyder: lyd, starttime: int = 0, løkker: int = 0, ændre: soundtransform = null): "(//hvis lydspor er besat, standse den nuværende lydspor, hvis (isplaying (centrale) stop (centrale); ////////spille den lyd, at skabe en ny lyd kanal var kanal: soundchannel = lyd. spille (starttime, løkker, omdanne); //lytte til fuldstændig, hvis den sunde kanal kanal. addeventlistener (event.sound_complete, onsoundcomplete); //skabe en ny lydspor var": "= nye soundtrack (centrale, kanal); //tilføje lydspor til ordbogen _soundtracks [centrale] = lydspor; //add kanal centrale kortlægning forhold _soundnøgler [-] = nøgle tilbage lydspor;} /* * * returnerer en henvisning til lydspor, der svarer til den, hvis centrale snor.* /offentlige statisk funktion getsoundtrack (nøgle: string): "{tilbage _soundtracks [centrale]) /* * * afgør, om et solidt spor i øjeblikket spiller.* /offentlige statisk funktion isplaying (nøgle: string): boolean {tilbage boolean (_soundtracks [centrale]);} /* * * stopper et godt spor.* /offentlige statisk funktion stop (nøgle: string): ugyldig (var - ":" = _soundtracks [centrale]; //se om lydspor eksisterer, hvis (") (//stoppe lydspor soundtrack. stop(); //og fjerne den fra ordbogen slette _soundtracks [centrale]; //sammen med den engelske kanal centrale forhold slette _soundkeys [soundtrack. kanal]) /* * * fjerner et solidt spor, når den lyd, den er fuldstændig * /menig static funktion onsoundcomplete e: begivenhed): ugyldig (//stemmer, hvis afsender til en sund kanal objekt var kanal: soundchannel = soundchannel (e.target); //fjerne tilfælde til at lytte removeeventlistener (event.sou kanal.nd_complete, onsoundcomplete); //ekstrakt tilsvarende nøgle var centrale: string = _soundkeys [-]; //fjerne lydspor stop (centrale);}}}, løntrin 5: f.eks. god manager testdrive, lad os prøve vores forsvarlig forvaltning.vi kommer til at sammenligne resultaterne af gentagne anmodninger om at spille en sund med og uden at anvende god manager.,, trin 6: f.eks. nye flash dokument, skabe en ny flash - dokument (5), trin 7: f.eks. skabe knapper, skabe to knapper på scenen.de kan drage deres egne og omdanne dem til symboler, eller du kan, som i mit tilfælde trækker to knap komponenter fra komponenter panel.navn på dem boing_btn "og" managedboing_btn ".,, trin 8: eksempel import lyden, import lyden, vi skal spille på biblioteket.du kan finde "boing. etsi" file for eksempel kilde mappe.,, trin 9: f.eks. dokumentet klasse endelig skabe et dossier for det dokument, som klasse.koden er temmelig ligetil, så jeg lige forklare det hele i bemærkningerne, pakke (import flash.display.sprite; import flash.events.mouseevent; import flash.media.sound; import sounds.soundmanager; offentlige klasse boingplayer udvider sprite {offentlige funktion boingplayer() (//add klikket lyttere for begge knapper boing_btn. addeventlistener (mouseevent.click, onboing); managedboing_btn. addeventlistener (mouseevent.click, onmanagedboing)} //spille lyden direkte ved at påberåbe sig den lyd. play() metode.privat funktion onboing e: mouseevent): ugyldig (var - lyder: sunde = nye boing(); lyd. play();} //spille lyden med god manager "restaurant" lydspor privat funktion onmanagedboing e: mouseevent): ugyldig (var - lyder: sunde = nye boing(); soundmanager spille (". boing", lyder)}}}, gå 10: eksempel prøvekøre, vi er færdige.tryk ctrl + træde til prøvning af film og forsøge hurtigt at trykke på knapper (husk at tænde din talere).til "boing!"button, flere lyde er overlappende, når spillet.med hensyn til den "forvaltes boing!"knap, som gør brug af god manager, en lyd er tvunget til at stoppe, før det næste er spillet, så du ikke behøver at høre lyde blandes sammen. milepæl, mener, at det online, trin 11: rammer for integration, befaler, befaler, befaler.det er altid rart at integrere deres arbejde med din tidligere, ikke?nu skal vi integrere sund forvaltningsramme med kommando rammer sammen med scene forvaltning.igen, hvis du ikke er bekendt med kommando ramme og stedet forvaltning, du må hellere tjekke dem ud i min tidligere tutorials (del 1, del 2), før de går videre, trin 12: rammer playsound kommando, navnet på denne post er temmelig selvforklarende. det spiller en forsvarlig med lyden manager., pakke commands.sounds (import - kommandoer. kommando; import flash.media.sound; import flash.media.soundtransform; import sounds.soundmanager; /* * * denne kommando spiller en lyd.* /offentlige klasse playsound udvider kommando (offentlige var centrale: string; offentlige var lyder: sunde; offentlige var starttime: int; offentlige var loops. int, offentlige var omdanne: soundtransform; offentlig funktion playsound (nøgle: string, lyder: lyd, starttime: int = 0, løkker: int = 0, ændre: soundtransform = null) (this.key = nøglen. this.sound = sunde; this.starttime = starttime; this.loops = loops. this.transform = omdanne;} tilsidesætte beskyttede funktion execute(): ugyldig (//- god manager til at spille den gode soundmanager. spille (centrale, lyd, starttime, løkker, omdanne); //fuldstændig kommando complete();}}}, trin 13: rammer stopsound kommando, dette er grundlæggendeden onde fætter til den tidligere kommando.denne kommando stopper et solidt spor ved hjælp af lyden manager., pakke commands.sounds (import - kommandoer. kommando; import sounds.soundmanager; /* * * denne kommando stopper et solidt spor, der svarer til en given nøgle.* /offentlige klasse stopsound udvider kommando (offentlige var centrale: string; offentlig funktion stopsound (nøgle: serie) (this.key = centrale;} tilsidesætte beskyttede funktion execute(): ugyldig (//- god manager for at standse lydspor, hvor ond >:] soundmanager. stop (centrale); //komplet kommandoen complete();}}}, trin 14: rammer soundload kommando, denne kommando indlæser en ekstern mp3 - fil til en sund, objekt.ikke før pålæsningen er fuldstændig vil kommandoen, complete(), metode kaldes.det giver os mulighed for let at kæde sammen kommandoen med andre ordrer, uden at skulle bekymre sig om håndtering af lastning afslutning., pakke commands.loading (import - kommandoer. kommando; import flash.events.event; import flash.media.sound; import flash.net.urlrequest; /* * * denne kommando indlæser en lyd.* /offentlige klasse soundload udvider kommando (offentlige var lyder: sunde; offentlige var url: http: //urlrequest; offentlig funktion soundload (lyder: lyd, url: http: //urlrequest) (this.sound = sunde; this.url = url.} tilsidesætte beskyttede funktion execute(): ugyldig (//add fuldstændig lytter lyd. addeventlistener (event.complete, oncomplete); //begynde - lyd. belastning (url)} privat funktion oncomplete e: begivenhed): ugyldig (//fjerne fuldstændigt efter lyd. removeeventlistener (event.complete, oncomplete); //fuldstændig kommando complete();}}}, integration, fuldstændig.gør dig klar til vores sidste eksempel!,, trin 15: eksempel forvaltningen af lyde med ordrer. i dette eksempel, vi skal give mulighed for at spille musik på samme lydspor.hvis en lyd er at blive spillet, når lydspor er besat, musik er først kom ud, og så den nye musik spilles.de svagere behandles af den, tweenmaxto, kommando, der internt, anvender den særlige egenskab, mængde, forudsat af, tweenmax, klasse fra greensock tweening platform.de to musik uden mp3 filer ladt i driftstid, bemærke, at vi kommer til at bruge den scene forvaltning.hvis du ønsker at genopfriske din hukommelse, tjek det her. trin 16: eksempel kopi - dokument, en kopi af fia - fil, der anvendes i det foregående eksempel.omdøbe de knapper til "music1_btn" og "music2_btn".du kan også ændre knap etiketter til musik "1" og "musik 2".og tilføje en ekstra knap ved navn "stop_btn", der er for at stoppe den musik, skridt 17: eksempel kopi mp3 filer, mp3 filer kan findes i kilde mappe.kopi til den samme mappe som fla fil.,, gå 18: eksempel dokument klasse, skabe en ny som dokumentation for det dokument, klasse i den nye fia - fil.instantiate en scene leder, og sæt den til en last, hvor de to mp3 filer er læsset, pakke (import flash.display.sprite; import scenes.scenemanager; offentlige klasse musicplayer udvider sprite {offentlige funktion musicplayer() (//instantiate en scene leder objekt var scenemanager: scenemanager = nye scenemanager(); //en lastning scene som den oprindelige scene scenemanager. setscene (nye loadingscene (det)}}}, skridt 19: eksempel på stedet, instantiates - scene to, lyd, objekter for lastning af to mp3 filer.knapperne er usynlige i begyndelsen, og vil der blive synlig igen, når lastningen er færdig.når læsning er afsluttet, scene umiddelbart pålægger scene leder til transit til de vigtigste scene, som skrevet i de tilfælde, onsceneset() metode.yderligere oplysninger findes i de bemærkninger, pakke (import - kommandoer. kommando; import commands.data.registerdata; import commands.loading.soundload; import commands.parallelcommand; import commands.serialcommand; import commands.utils.setproperties; import flash.events.event; import flash.media.sound; import flash.net.urlrequest; import scener. scene; offentlige klasse loadingscene udvider scene (//en henvisning til det dokument, rod beholder private var beholder: musicplayer; offentlig funktion loadingscene (container: musicplayer) (this.container = beholder} tilsidesætte offentlig funktion createintrocommand(): kommando (//skabe to gode ting at lade de to mp3 filer var musikc1: sunde = nye sound(), var music2: sunde = nye sound(); var kommando: kommando = nye parallelcommand (0 //gemmer på nye setproperties (container.music1_btn (- 0, synlige: falske}), nye setproperties (container.music2_btn (- 0, synlige: falske}), nye setproperties (container.stop_btn (- 0, synlige: falske}) //registrering af to solide objekter til dataadministrator nye registerdata ("music1", music1), nye registerdata ("music2", music2) //begynde indlæsning af mp3 filer nye soundload (music1, nye urlrequest ("music1. mp3 -"), nye soundload (music2, nye urlrequest ("music2. mp3 ')); tilbage kommando;} - pe offentlige funktion onsceneset(): ugyldig (//- scene leder at skifte til den vigtigste scene direkte efter intro kommando er fuldstændig scenemanager. setscene (nye mainscene (beholder)}}}, gå 20: f.eks. de vigtigste scene, de vigtigste scene, bringer den skjulte knapper tilbage til synlige og registre, playmusic(), metode og den metode, stopmusic(), som lytter til klik begivenhed.i, playmusic(), metode, en serie kommando er gennemført, hvis "bgm" sundt spor er besat.- første midlertidigt fjerner klik lyttere, imod den nuværende musik, stopper de nuværende musik spiller den nye musik på nu, tom "bgm" lydspor, og endelig er tilføjet klik lyttere.det, stopmusic, metode er stort set det samme, kun, at der ikke er nogen ny musik playback.denne komplekse række aktioner er der kun gennemføres i et par linjer af ren kode.flot, ikke?bemærke, at tilføje og fjerne lyttere er fælles foranstaltninger, som er til stede i både, playmusic(), metode og, stopmusic() metode.så de er medregnet som to private ejendomme, addlisteners, og removelisteners, igangsat i konstruktøren., pakke (import - kommandoer. kommando; import commands.events.addeventlistener; import commands.events.removeeventlistener; import commands.greensock.tweenmaxto; import commands.parallelcommand; import commands.serialcommand; import commands.sounds.playsound; import commands.sounds.stopsound; import data.datamanager; import flash.display.sprite; import flash.events.event; import flash.events.mouseevent, import flash.media.sound; import flash.utils.dictionary; import scener. scene; import sounds.soundmanager; import sounds.soundtrack; /* * * de vigtigste scene vises, når læsninger fuldført.* /offentlige klasse mainscene udvider scene (//en henvisning til det dokument, rod beholder private var beholder: musicplayer; private var btn1: sprite; private var btn2: sprite; private var btn3: sprite; private var datakeys: ordbog = nye dictionary(); private var addlisteners: kommando; private var removelisteners: kommando; offentlige funktion mainscene (container: musicplayer) (this.container = beholder btn1 = container.music1_btn; btn2 = container.music2_btn; btn3 = container.stop_btn; //data, nøgler, der anvendes til at hente lyder genstande fra data, direktør i playmusic() metode datakeys [btn1] = "music1" datakeys [btn2] = "music2"; //kommandoen giver alle listeners addlisteners = nye parallelcommand (0, nye addeventlistener (btn1, mouseevent.click, playmusic), nye addeventlistener (btn2, mouseevent.click, playmusic), nye addeventlistener (btn3, mouseevent.click, stopmusic)); //denne kommando fjerner alle lyttere removelisteners = nye parallelcommand (0, nye removeeventlistener (btn1, mouseevent.click, playmusic), nye removeeventlistener (btn2, mouseevent.click, playmusic), nye removeeventlistener (btn3, mouseevent.click, stopmusic)} tilsidesætte offentlig funktion createintrocommand(): kommando (var - kommando: kommando = nye serialcommand (0 //i knapper nye parallelcommand (0nye tweenmaxto (btn1, 1, (autoalpha: 1}), nye tweenmaxto (btn2, 1, (autoalpha: 1}), nye tweenmaxto (btn3, 1, (autoalpha: 1}) //add klik lyttere addlisteners); tilbage kommando;} /* * * spiller musik.* /privat funktion playmusic e: begivenhed): ugyldig (//efter lyden objekt, der svarer til en data - nøgle var musik: sunde = datamanager. getdata (datakeys [e.target]); //se om bgm lydspor spiller allerede hvis (soundmanager. isplaying ("bgm") (////////hente spiller lydspor var ":" = soundmanager. getsoundtrack ("bgm") var kommando: kommando = nye serialcommand (0 //midlertidigt fjerne klik lyttere removelisteners, //fade ud af den nuværende lydspor nye tweenmaxto (soundtrack.channel, 1 (bind: 0}) //og så stoppe det lyder spore nye stopsound ("bgm") //spille en ny lyd.han samme lydspor nye playsound ("bgm", musik, 0, int.max_value) //re tilføje klik lyttere addlisteners) kommando. start();} andre (//spiller bare lyden, hvis lydspor er tom soundmanager. spille ("bgm", musik, 0, int.max_value)}} /* * * stopper musikken, som i øjeblikket spiller.* /privat funktion stopmusic e: begivenhed): ugyldig (//se om bgm lydspor spiller allerede hvis (soundmanager. isplaying ("bgm") (//hente spiller lydspor var ":" = soundmanager. getsoundtrack ("bgm") var kommando: kommando = nye serialcommand (0 //midlertidigt fjerne klik lyttere removelisteners, //fade ud af den nuværende lydspor nye tweenmaxto (soundtrack.channel, 1 (bind: 0}) //og så stopper lyden spore nye stopsound ("bgm") //re tilføje klik lyttere addlisteners) kommando. start();}}}}, gå 21: f.eks. test filmen, vi er klar til attest den film.tryk ctrl + træde til at teste det.når du klikker på en knap, en musikken begynder at spille.efter at en anden musik svinder, og derefter en ny starter fra begyndelsen. milepæl, mener, at det online, skridt 22: ekstra kode jockey version, er det enden på den lektion, jeg ved det.men jeg kunne bare ikke modstå vise dette til dig.hvis du er en kode jockey, jeg vil vædde med, at du allerede har bemærket, at der er mange ligheder i, playmusic(), metode og, stopmusic() metode.hvorfor ikke refactor dem i en enkelt?hvis du ikke er interesseret i denne kodeks, jocky version af musik spiller, du kan springe til den sammenfattende afsnit.ellers, bare gå på læsning.først, erstatter alle de, playmusic, og stopmusic i kildekoden, handlemusic, vores nye omstændigheder til at lytte.næste, sletter den, playmusic, og, stopmusic, metode og tilføje følgende, handlemusic(), metode i de vigtigste scene klasse., * * * spiller eller standser musikken.kode jockey version.* /privat funktion handlemusic e: begivenhed): ugyldig (var musik: sunde = datamanager. getdata (datakeys [e.target]); hvis (soundmanager. isplaying ("bgm") (var - ":" = soundmanager. getsoundtrack ("bgm") var kommando: kommando = nye serialcommand (0, removelisteners, nye tweenmaxto (soundtrack.channel, 1 (bind: 0}), nye stopsound ("bgm") //afgøre, om vi kommer til at spille en anden musik (musik?(ny playsound ("bgm", musik, 0, int.max_value)): (nye dummy()), addlisteners) kommando. start();} andre (hvis (musik) soundmanager. spille ("bgm", musik, 0, int.max_value)), vil i se, at den eneste forskel mellem denne metode og den oprindelige lyttere, er følgende stykke kode: (musik?(ny playsound ("bgm", musik, 0, int.max_value)): (nye dummy()), hvad fanden er det her?det er faktisk det?: betinget operatør.det er en ternære operatør, hvilket betyder, at det kræver tre operander, a, b og c. meddelelsen "en?b: c "vurderer, at b, hvis en er sandt, eller c, andet.den musik, variable skulle holde en henvisning til en sund, genstand, således at den variable vurderes korrekt.men hvis tilfælde - mål er "stop_btn" knap, variabel indeholder en ugyldig værdi, som vurderer, at falske i ternære operatør.så hvis de to musik knapper er faldet, ovennævnte kode del betragtes som fælles linje kode nedenfor. nye playsound ("bgm", musik, 0, int.max_value), hvis stop knappen er trykket, koden er chunk betragtes som et fjols kommando, som ganske enkelt ikke. nye dummy(), bare en anden ting at bemærke det.følgende linje kode, soundmanager. spille ("bgm", musik, 0, int.max_value), ændres, hvis (musik) soundmanager. spille ("bgm", musik, 0, int.max_value); det er for at behandle den undtagelse at lydspor i øjeblikket er tomme.hvis du kan forstå koden del ovenfor, er jeg ret sikker på, at du kunne finde ud af, hvad det handler om. test filmen ved presning af ctrl + ind, vil du se det samme resultat som den sidste eksempel.du kan betragte det som en opfyldelse af en kode jockeys kodning forfængelighed.,, resumé på denne forelæsning, du har lært at styre lyder gode spor.en lydspor tillader kun en lyd, der spilles på en gang, og derfor udgør en fælles ideal karakter er stemme eller baggrundsmusik.også, du har set, hvordan vi kan integrere de sund forvaltningsramme med kommando over rammer, som giver dig en stor vedligehold og fleksibilitet fremme på deres ansøgninger. det er slutningen af tutor.jeg håber, du nød det.mange tak for det!,











Previous:
Next Page: