Administrerende Sounds med Commands

Managing Sounds med kommandoer
Del
Del
Del
Del
Dette Cyber ​​mandag Envato Tuts + kurs vil bli redusert å bare $ 3. Ikke gå glipp av.

Sound ledelse er svært viktig for mange typer Flash-applikasjoner, som for eksempel interaktive nettsteder og spill. Så lenge du ønsker å levere en rik interaktiv opplevelse, vil du kanskje vurdere å gjøre bruk av lydeffekter og bakgrunnsmusikk. I denne opplæringen, vil jeg presentere en minimalistisk sound rammeverket som styrer lyden inn lydspor. Og jeg vil vise hvordan du kan integrere lyden rammeverk med kommandoen rammeverket fra mine tidligere tutorials.




Innledning

Jeg har spilt spill med uforsiktige lyd ledelse, og som degraderer brukeropplevelse. Har du noen gang spilt et spill, sier et actionspill, hvor karakterens utrops stemmen spiller før den forrige tale slutter, overlapper hverandre? Det er et resultat av dårlig lyd ledelse: det bør ikke være mer enn en stemme av samme karakter som spiller om gangen. Lyden rammeverket jeg er i ferd med å dekke vil ta seg av dette problemet ved å håndtere lyder med lydspor.

Eksemplene i denne opplæringen gjør bruk av kommandoen rammeverk og scene rammeverket fra min forrige tutorial, Tenke i Commands (del 1, del 2), og eksemplene bruker også data manager klasse fra lasting av data med kommandoer. Jeg anbefaler at du går gjennom disse veiledningene først før du går videre. Dessuten trenger du GreenSock Tweening Platform for å fullføre eksemplene



Trinn 1:. Teori lydspor

lydsporet vi snakker om her har ingenting å gjøre med spill eller film lydspor. Et lydspor er en imaginær "spor" i forbindelse med en avspilling av et enkelt
lyd. Ett enkelt lydspor tillater ikke mer enn én lyd spiller om gangen. Hvis et lydspor er for tiden spiller en lyd, sier vi at det er okkupert
. Hvis en annen lyd skal spilles på et okkupert lydspor, er for tiden spiller lyden stoppet, og deretter den nye er spilt på sporet. Det er derfor rimelig å spille en eneste karakters stemmene på et enkelt lydspor, slik som å unngå lyden overlappende problemet nevnt tidligere. Også i de fleste tilfeller bør det være bare ett spor for bakgrunnsmusikk.

La oss ta en titt på noen konseptuelle tall. Et enkelt program kan ha flere lydspor.

Hver lydspor kan holde en enkelt spiller lyd.

Hvis en lyd er å bli spilt på et okkupert spor, er den "gamle" lyd først stoppet, og deretter den "nye" lyd spilles på sporet



Trinn 2:. Teori Ramme

Sound Management Framework consistes av to klasser, Soundmanager
klasse og SoundTrack
klasse. Hvert lydspor er tildelt en unik nøkkel streng. Underliggende spille lyd en okkupert lydspor er faktisk en innfødt SoundChannel objekt hentet fra de innfødte Sound.play () -metoden, og Soundmanager
klassen klarer lydspor og organiserer avspilling av lyder.

Her er noen raske forhåndsvisninger av bruken av rammeverket. Følgende kode spiller en ny lyd på et lydspor forbundet med nøkkelen strengen "musikk", der MySound
er en lyd klasse fra biblioteket.
//Spille av en lyd på "musikk" trackSoundManager Beskytt din Nintendo DS ("music", ny MySound ());

Hvis den samme linjen i koden kjøres igjen før avspillingen er ferdig, er den originale lyden stoppet, og en ny lyd spilles på "musikk" track.
//stoppe den originale lyden på "musikk" spor, og spille en ny oneSoundManager.play ("musikk", ny MySound ());

SoundManager.stop ()
metoden stopp a. lydspor forbundet med en bestemt nøkkel streng
//stoppe "musikk" høres trackSoundManager.stop ("musikk");

For å transformere lyden, liker å justere volumet, vil vi trenge å få en referanse til et lydspor underliggende lydkanal. Referansen kan fås ved å gå til SoundTrack.channel
eiendom
Var kanal: SoundChannel = SoundManager.getSoundTrack ("musikk") kanal; Var forvandle:.. SoundTransform = channel.soundTransform; transform.volume = 0,5; channel.soundTransform = forvandle;



Trinn 3: Klasser soundtracket Class

Nok teori. La oss komme ned til koding. Vi kommer til å bruke forskjellige nøkkel strenger
å skille forskjellige lydspor. Her er SoundTrack
klasse, som i hovedsak representerer en nøkkel-kanal par. Detaljer er beskrevet i kommentarene
pakke lyder {import flash.media.SoundChannel.; /** * Et lydspor representerer en nøkkel-kanal par. * /Public class SoundTrack {//beskyttet nøkkelverdi private Var _key: String; offentlig funksjon få nøkkel (): String {return _key; } //Beskyttet lydkanal henvisning privat Var _channel: SoundChannel; offentlig funksjon får kanal (): SoundChannel {return _channel; } Offentlig funksjon SoundTrack (nøkkel: String, kanal: SoundChannel) {_key = nøkkel; _channel = kanal; } /** * Stopper den underliggende lydkanal. * /Public funksjon stop (): void {_channel.stop (); }}}



Trinn 4: Klasser The Soundmanager Class

Og her er Soundmanager
klasse. Legg merke til at nøkkelen-track foreningen håndteres ved hjelp av ordbok klassen. Et spor tømmes automatisk hvis en spiller lyden har nådd slutten
pakke lyder {import flash.events.Event.; import flash.media.Sound; import flash.media.SoundChannel; import flash.media.SoundTransform; import flash.utils.Dictionary; /** * Denne klassen lar deg administrere lyder i form av lydspor. * /Public class Soundmanager {//en ordbok som holder spor av alle lydspor private Static Var _soundTracks: ordbok = new ordbok (); //en ordbok som kartlegger en lydkanal til den tilsvarende tasten for avspilling ferdigstillelse håndtering private Static Var _soundKeys: ordbok = new ordbok (); /** * Spiller av en lyd og returnerer en tilsvarende lydspor objekt. * /Public static funksjon play (nøkkel: String, lyd: Lyd, Starttime: int = 0, slep: int = 0, transform: SoundTransform = null): SoundTrack {//hvis lydsporet er okkupert, stoppe den nåværende lydspor if (isPlaying (key)) stop (nøkkel); //spille av lyden, og skaper en ny lyd kanal Var kanal: SoundChannel = sound.play (starttid, løkker, transform); //lytte for hele arrangementet av lydkanal channel.addEventListener (Event.SOUND_COMPLETE, onSoundComplete); //oppretter et nytt lydspor Var Soundtrack: SoundTrack = nytt lydspor (key, kanal); //legge lydsporet i ordlisten _soundTracks [key] = soundtrack; //legger de kanaltast kartlegging relasjon _soundKeys [channel] = nøkkel; returnere soundtrack; } /** * Returnerer en referanse til lydspor som tilsvarer den medfølgende nøkkelen streng. * /Public static funksjon getSoundTrack (nøkkel: String): SoundTrack {return _soundTracks [key]; } /** * Bestemmer om et lydspor som spilles i øyeblikket. * /Public static funksjon isPlaying (nøkkel: String): Boolean {return boolske (_soundTracks [key]); } /** * Stopper et lydspor. * /Public static funksjon stop (nøkkel: String): void {var Soundtrack: SoundTrack = _soundTracks [key]; //sjekke om lydsporet finnes if (Soundtrack) {//stoppe lydsporet soundTrack.stop (); //og fjerne det fra ordboken slette _soundTracks [key]; //sammen med kanal-key forhold slette _soundKeys [soundTrack.channel]; }} /** * Fjerner et lydspor når lyden avspillingen er ferdig * /private static funksjon onSoundComplete (e: Hendelses): void {//kastet hendelsen sentralen til en lydkanal objekt Var kanal: SoundChannel = SoundChannel (e. mål); //fjerne tilfelle lytteren channel.removeEventListener (Event.SOUND_COMPLETE, onSoundComplete); //trekke den tilsvarende tasten Var nøkkel: String = _soundKeys [channel]; //fjerne lydsporet stopp (nøkkel); }}}



Trinn 5: Eksempel Sound Manager prøvekjøre

Nå la oss teste vår lyd rammeverket for forvaltningen. Vi kommer til å sammenligne resultatet av gjentatte forespørsler om å spille en lyd med og uten bruk av lyd lederen



Trinn 6:. Eksempel New Flash Document

Opprett en ny Flash-dokument (duh)



Trinn 7:. Eksempel Lag Knapper

Lag to knapper på scenen. Du kan tegne din egen og konvertere dem til symboler, eller du kan, som i mitt tilfelle, drar to Button komponenter fra Components panelet. Navngi dem "boing_btn" og "managedBoing_btn"



Trinn 8:. Eksempel Import Sound

Importer lyden vi kommer til å spille til biblioteket. Du kan finne den "Boing.wav" -filen i eksempelet kildemappen



Trinn 9:. Eksempel Dokument Class

Til slutt opprette en AS-fil for dokumentet klassen. Koden er ganske grei, så jeg bare forklare alt i kommentarfeltet
pakke {import flash.display.Sprite.; import flash.events.MouseEvent; import flash.media.Sound; import sounds.SoundManager; public class BoingPlayer strekker Sprite {offentlig funksjon BoingPlayer () {//legge klikk lyttere for begge knappene boing_btn.addEventListener (MouseEvent.CLICK, onBoing); managedBoing_btn.addEventListener (MouseEvent.CLICK, onManagedBoing); } //Spille av lyden direkte ved å påberope seg Sound.play () -metoden. privat funksjon onBoing (e: MouseEvent): void {var lyd: Sound = new Boing (); sound.play (); } //Spille av lyden med lyden lederen på "boing" lydspor privat funksjon onManagedBoing (e: MouseEvent): void {var lyd: Sound = new Boing (); SoundManager.play ("Boing", lyd); }}}



Trinn 10: Eksempel Test Drive

Vi er ferdige. Trykk Ctrl + Enter for å teste filmen, og prøv raskt klikke på knappene (husk å slå på høyttalerne). For "Boing!" knappen, er flere lyder overlappende når de spilles. Som for "Managed Boing!" knappen, som gjør bruk av lyden manager, er én lyd tvunget til å stoppe før den neste blir spilt, slik at du ikke vil høre lyder blandes sammen
Milepæl se det på nettet



Trinn 11.: Work Integrasjon

Kommandoer, kommandoer, kommandoer. Det er alltid hyggelig å integrere arbeidet med tidligere, ikke sant? Nå kommer vi til å integrere lyden rammeverk med kommandoen rammeverket, sammen med scene rammeverket for forvaltningen. Igjen, hvis du ikke er kjent med kommandoen rammeverk og scenen rammeverket, du bør nok sjekke dem ut i mine tidligere tutorials (del 1, del 2) før du går videre.



Trinn 12: Ramme PlaySound Command

Navnet på denne kommandoen er ganske selvforklarende. det spiller en lyd med lyden leder
pakke commands.sounds {import commands.Command; import flash.media.Sound; import flash.media.SoundTransform; import sounds.SoundManager; /** * Denne kommandoen spiller en lyd. * /Public class PlaySound strekker Command {public Var nøkkel: String; offentlig Var lyd: Sound; offentlig Var Starttime: int; offentlig Var slep: int; offentlig Var forvandle: SoundTransform; offentlig funksjon PlaySound (nøkkel: String, lyd: Lyd, Starttime: int = 0, slep: int = 0, transform: SoundTransform = null) {this.key = nøkkel; this.sound = lyd; this.startTime = Starttime; this.loops = sløyfer; this.transform = forvandle; } Ride beskyttet funksjon utføre (): void {//fortelle lyden manager for å spille av lyden SoundManager.play (key, lyd, starttid, løkker, transform); //fullføre kommandoen fullstendig (); }}}



Trinn 13: Work StopSound Command

Dette er i utgangspunktet den onde fetter av den forrige kommandoen. Denne kommandoen stopper et lydspor ved hjelp av lyd lederen
pakke commands.sounds {import commands.Command.; import sounds.SoundManager; /** * Denne kommandoen stopper et lydspor som tilsvarer en gitt nøkkel. * /Public class StopSound strekker Command {public Var nøkkel: String; offentlig funksjon StopSound (nøkkel: String) {this.key = nøkkel; } Ride beskyttet funksjon utføre (): void {//fortelle lyden manager for å stoppe lyden spor, hvor onde >:] SoundManager.stop (nøkkel); //fullføre kommandoen fullstendig (); }}}



Trinn 14: Work SoundLoad Command

Denne kommandoen laster en ekstern MP3-fil inn i en Sound
objekt. Ikke før lastingen er fullført vil kommandoens komplett ()
metoden kalles. Dette gir oss muligheten til å enkelt kjeden sammen kommandoen med andre kommandoer, uten å måtte bekymre seg om håndtering av laste ferdigstillelse
pakke commands.loading {import commands.Command.; import flash.events.Event; import flash.media.Sound; import flash.net.URLRequest; /** * Denne kommandoen laster en lyd. * /Public class SoundLoad strekker Command {public Div lyd: Sound; offentlig Var url: URLRequest; offentlig funksjon SoundLoad (lyd: Lyd, url: URLRequest) {this.sound = lyd; this.url = url; } Ride beskyttet funksjon utføre (): void {//legge hele lytteren sound.addEventListener (Event.COMPLETE, onComplete); //begynne lasting sound.load (url); } Private funksjon onComplete (e: Hendelses): void {//fjerne hele lytteren sound.removeEventListener (Event.COMPLETE, onComplete); //fullføre kommandoen fullstendig (); }}}

Integrering fullført. Få forberedt for vår siste eksempel



Trinn 15: Eksempel Administrere Sounds med kommandoer

I dette eksemplet skal vi tillate brukere å spille to-musikk på samme lydspor . Hvis en lyd som skal spilles når lydsporet er okkupert, er den originale musikken først falmet ut, og deretter den nye musikken spilles. Den fading-out håndteres av TweenMaxTo
kommandoen, som internt bruker spesiell eiendom volum Anmeldelser levert av TweenMax
klasse fra GreenSock Tweening Platform. De to musikken er eksterne MP3-filer lastes under kjøring.

Legg merke til at vi kommer til å bruke scenen rammeverket for forvaltningen. Hvis du ønsker å friske opp hukommelsen, gå sjekk det ut her



Trinn 16:. Eksempel Kopier Flash Document

Lag en kopi av FLA-filen som brukes i forrige eksempel. Endre navn på knappene for å "music1_btn" og "music2_btn". Du kan også endre knappeetiketter til "Music 1" og "Music 2". Og legge til en ekstra knapp som heter "stop_btn", som er for å stoppe musikken



Trinn 17:. Eksempel Kopier MP3-filer

MP3-filer kan finnes i kildemappen . Kopiere dem til samme mappe som FLA filen



Trinn 18:. Eksempel Document Class

Opprett en ny AS filen for dokumentet klasse av den nye FLA-filen. Bruke et scene manager, og initialisere den til en lastetilstand, hvor de to MP3-filene er lastet
pakke {import flash.display.Sprite.; import scenes.SceneManager; public class Musicplayer strekker Sprite {offentlig funksjon Musicplayer () {//bruke et scene leder objekt Var sceneManager: SceneManager = new SceneManager (); //satt en laste scene som den første scene sceneManager.setScene (ny LoadingScene (denne)); }}}



Trinn 19: Eksempel Loading Scene

Laste scene instantiates to Sound
gjenstander for å legge de to MP3-filer. Knappene er satt usynlig i begynnelsen, og vil bli satt synlig igjen når lastingen er ferdig. Når lastingen er fullført, scenen instruerer umiddelbart scenen manager til transitt til hovedscenen, som skrevet i styres onSceneSet ()
metoden. Ytterligere detaljer er beskrevet i kommentarfeltet
pakke {import commands.Command.; 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 scenes.Scene; public class LoadingScene strekker Scene {//en referanse til dokumentet rot container privat Var container: Musicplayer; offentlig funksjon LoadingScene (container: Musicplayer) {this.container = beholder; } Overstyre offentlig funksjon createIntroCommand (): Command {//oppretter to lydobjekter å laste de to MP3-filer Var music1: Sound = new Sound (); Var music2: Sound = new Sound (); Var kommando: Command = new ParallelCommand (0, //skjule knappene nye SetProperties (container.music1_btn, {alfa: 0, synlig: falske}), nye SetProperties (container.music2_btn, {alfa: 0, synlig: falsk}) nye SetProperties (container.stop_btn, {alfa: 0, synlig: falsk}), //registrere de to lydobjekter til data manager nye RegisterData ("music1", music1), ny RegisterData ("music2", music2), //begynne lasting av MP3-filene nye SoundLoad (music1, ny URLRequest ("Music1.mp3")), ny SoundLoad (music2, ny URLRequest ("Music2.mp3"))); tilbake kommandoen; } Overstyre offentlig funksjon onSceneSet (): void {//fortelle scenen manager for å bytte til hovedscenen rett etter introen kommandoen er fullført sceneManager.setScene (ny MainScene (container)); }}}



Trinn 20: Eksempel hovedscenen

Det viktigste scene bringer de skjulte knappene tilbake til synlige, og registrerer playmusic ()
metoden og stopMusic ()
metode som lyttere for klikk hendelsen. I playmusic ()
metoden, er en serie kommando henrettet hvis "BGM" lydspor er okkupert. Kommandoen fjerner først midlertidig klikk lyttere, fades ut dagens musikk, stopper den aktuelle musikken, spiller ny musikk på den nå tomme "BGM" lydspor, og så til slutt gjen legger klikk lyttere. stopMusic
metoden gjør i utgangspunktet det samme, bare at det er ingen ny musikkavspilling. Dette kompleks serie av handlinger blir utført i bare noen få linjer med ren kode. Ganske ryddig, ikke sant?

Legg merke til at legge til og fjerne lytterne er vanlige handlinger som er til stede både i playmusic ()
metoden og stopMusic ()
metoden. Så de er priset ut som to private eiendommer, addListeners
og removeListeners
, initialisert i konstruktøren
pakke {import commands.Command.; 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 scenes.Scene; import sounds.SoundManager; import sounds.SoundTrack; /** * Hoved scene vises når lastingen er fullført. * /Public class MainScene strekker Scene {//en referanse til dokumentet rot container privat Var container: Musicplayer; private Var btn1: Sprite; private Var btn2: Sprite; private Var btn3: Sprite; private Var dataKeys: ordbok = new ordbok (); private Var addListeners: Command; private Var removeListeners: Command; offentlig funksjon MainScene (container: Musicplayer) {this.container = beholder; btn1 = container.music1_btn; btn2 = container.music2_btn; btn3 = container.stop_btn; //datanøkler brukes til å hente lyd objekter fra data manager i playmusic () -metoden dataKeys [btn1] = "Music1"; dataKeys [btn2] = "music2"; //denne kommandoen legger til alle lyttere addListeners = new ParallelCommand (0, ny addEventListener (btn1, MouseEvent.CLICK, playmusic), ny addEventListener (btn2, MouseEvent.CLICK, playmusic), ny addEventListener (btn3, MouseEvent.CLICK, stopMusic)); //denne kommandoen fjerner alle lyttere removeListeners = new ParallelCommand (0, ny removeEventListener (btn1, MouseEvent.CLICK, playmusic), ny removeEventListener (btn2, MouseEvent.CLICK, playmusic), ny removeEventListener (btn3, MouseEvent.CLICK, stopMusic)); } Overstyre offentlig funksjon createIntroCommand (): Command {var kommandoen: Command = new SerialCommand (0, //visne i knappene nye ParallelCommand (0, ny TweenMaxTo (btn1, 1, {autoAlpha: 1}), ny TweenMaxTo (btn2, 1, {autoAlpha: 1}), ny TweenMaxTo (btn3, 1, {autoAlpha: 1})), //legge klikk lytternes addListeners); tilbake kommandoen; } /** * Spiller av musikk. * /Private funksjon playmusic (e: Hendelses): void {//hente lyden objekt tilsvarer en datanøkkel Div musikk: Sound = DataManager.getData (dataKeys [e.target]); //sjekke om BGM lydspor allerede spiller if (SoundManager.isPlaying ("BGM")) {//hente spille lydspor Var Soundtrack: SoundTrack = SoundManager.getSoundTrack ("BGM"); Var kommando: Command = new SerialCommand (0, //midlertidig fjerne klikk lyttere removeListeners, //fade ut den aktuelle lyden spore ny TweenMaxTo (soundTrack.channel, 1, {volum: 0}), //og deretter stoppe lydspor ny StopSound ("BGM"), //spille en ny lyd på den samme lyden spore ny PlaySound ("BGM", musikk, 0, int.MAX_VALUE), //re-legge klikk lytternes addListeners); command.start (); } Else {//bare spille av lyden hvis lydsporet er inaktiv SoundManager.play ("BGM", musikk, 0, int.MAX_VALUE); }} /** * Stopper musikken som spilles. * /Private funksjon stopMusic (e: Hendelses): void {//sjekke om BGM lydspor allerede spiller if (SoundManager.isPlaying ("BGM")) {//hente spille lydspor Var Soundtrack: SoundTrack = Soundmanager. getSoundTrack ("BGM"); Var kommando: Command = new SerialCommand (0, //midlertidig fjerne klikk lyttere removeListeners, //fade ut den aktuelle lyden spore ny TweenMaxTo (soundTrack.channel, 1, {volum: 0}), //og deretter stoppe lydspor ny StopSound ("BGM"), //re-legge klikk lytternes addListeners); command.start (); }}}}



Trinn 21: Eksempel Test Movie

Vi er klare til å teste filmen. Trykk CTRL + ENTER for å teste den. Når du klikker på en knapp, begynner en musikk å spille. Etter å ha klikket en annen, fades musikken ut, og deretter en ny starter fra begynnelsen
Milepæl se det på nettet



Trinn 22:. Ekstra Kode Jockey versjon

Det er slutten av opplæringen, vet jeg. Men jeg kunne bare ikke motstå fra å vise dette til deg. Hvis du er en kode jockey, jeg vedder på at du allerede har lagt merke til at det er mange likheter i playmusic ()
metoden og stopMusic ()
metoden. Hvorfor ikke refactor dem til en eneste en? Hvis du ikke er interessert i denne koden jocky versjon av musikkspilleren, kan du hoppe til sammendraget delen. Ellers, bare gå på lesing!

Først erstatte alle playmusic Hotell og stopMusic
i kildekoden med handleMusic
, vår nye hendelse lytteren . Deretter sletter du playmusic Hotell og stopMusic
metode, og legge til følgende handleMusic ()
metoden i hovedscenen klassen. Twitter /** * Spiller eller stopper musikken. Kode jockey versjon. * /private funksjon handleMusic (e: Hendelses): void {var musikk: Sound = DataManager.getData (dataKeys [e.target]); if (SoundManager.isPlaying ("BGM")) {var Soundtrack: SoundTrack = SoundManager.getSoundTrack ("BGM"); Var kommando: Command = new SerialCommand (0, removeListeners, ny TweenMaxTo (soundTrack.channel, 1, {volum: 0}), ny StopSound ("BGM"), //avgjøre om vi kommer til å spille en annen musikk (musikk ) (ny PlaySound ("BGM", musikk, 0, int.MAX_VALUE)): (ny Dummy ()), addListeners); command.start (); } Else {if (musikk) SoundManager.play ("BGM", musikk, 0, int.MAX_VALUE); }}

Du vil merke at den eneste store forskjellen mellom denne metoden og de opprinnelige lyttere, er følgende mengde koder: product: (musikk) (ny PlaySound ("BGM", musikk, 0, int?. MAX_VALUE)) :( ny Dummy ()),

Hva i helvete er dette likevel? Dette er faktisk den:? Betinget operatør. Det er en trefoldig operatør, noe som betyr at det krever tre operander, A, B og C. Uttalelsen "En B: C" evaluerer til B hvis A er sann, eller C på annen måte. musikk
variabelen er ment å holde en referanse til en Sound
objekt, slik at variabelen har verdien true. Men hvis det tilfelle sentralen mål er "stop_btn" -knappen, inneholder variabelen en nullverdi, som vurderer å false i det ternære operatør. Så, hvis de to musikk-knapper er klikket, er koden ovenfor blings ansett som den eneste linje med kode nedenfor.
Ny PlaySound ("BGM", musikk, 0, int.MAX_VALUE)

Ellers, hvis stopp knappen klikkes, koden del er å anse som en dummy-kommandoen, som rett og slett gjør ingenting.
ny Dummy ()

Bare en annen ting å legge merke til. Følgende linje med kode
SoundManager.play ("BGM", musikk, 0, int.MAX_VALUE);

endres for bedriften hvis (musikk) SoundManager.play ("BGM", musikk, 0, int.MAX_VALUE);

Dette er for å håndtere unntaket at lydsporet er tom. Hvis du kan forstå koden blings ovenfor, er jeg ganske sikker på at du kunne finne ut hva denne linjen handler om.

Test filmen ved å trykke Ctrl + Enter, vil du se nøyaktig samme resultat som siste eksempelet. Du kan anse det som en oppfyllelse av en kode jockey sin koding forfengelighet.



Sammendrag

I denne opplæringen, har du lært hvordan man skal håndtere lyder med lydspor. Ett lydspor tillater bare én lyd som spilles på en gang, derfor ideelt for å representere et enkelttegn stemme eller bakgrunnsmusikk. Også har du sett hvordan du kan integrere lyden rammeverk med kommandoen rammeverk, som gir deg en stor vedlikeholdsmuligheter og fleksibilitet boost på programmene dine.

Dette er slutten av opplæringen. Jeg håper du likte den. Tusen takk for lesing!