Corona SDK een app voor muziekspelers maken - laatste stappen

Welkom bij het tweede deel van onze Corona SDK-muziekspeler-zelfstudie. In dit deel plaatsen we de interface in scène, verwerken we de app-logica, knopbedieningen en de stappen om de laatste app te bouwen.


Waar we gebleven zijn?

Controleer alsjeblieft deel 1 van de serie om deze tutorial volledig te begrijpen.

Stap 1: Variabelen

Dit zijn de variabelen die we zullen gebruiken. Lees de opmerkingen in de code om meer over hen te weten, sommige van hun namen verklaren zichzelf, dus daar zal geen commentaar zijn.

 -- Variabelen local currentSong = 1 lokaal spelende lokale timer Source lokaal min = 0 local sec = 0

Stap 2: Functies

Verklaar alle functies als lokaal aan het begin.

 -- Lokale functies Main =  local buildGUI =  local playCurrentSong =  local stopSong =  local nextSong =  local prevSong =  local updateInfo =  local updateProgress = 

Stap 3: Hoofdfunctie

Vervolgens maken we de functie waarmee alle app-logica wordt geïnitialiseerd:

 -- Hoofdfunctiefunctie Hoofd () buildGUI () einde

Stap 4: Bouw de GUI

De volgende functie plaatst alle GUI op het podium. Het is gebouwd in dezelfde volgorde waarin we de variabelen hebben gedeclareerd, dus u kunt elk onderdeel eenvoudig identificeren aan de hand van de namen van de variabelen.

 function buildGUI () bg = display.newImage ('background.png') infoBar = display.newImage ('infoBar.png', 20, 168) imageMarker = display.newImage ('imageMarker.png', 30, 178) cdCover = display.newImage ('s1.png', 30, 178) titleText = display.newText ('1. Here Without You', 117, 176, native.systemFontBold, 14) titleText: setTextColor (246, 237, 240) byText = display.newText ('Door', 121, 197, native.systemFont, 10) byText: setTextColor (191, 182, 183) artistText = display.newText ('3 Doors Down', 137, 197, native.systemFontBold, 10) artistText: setTextColor (244, 204, 106) buttonBar = display.newImage ('buttonBar.png', 20, 278) playBtn = display.newImage ('playBtn.png', 25, 279) stopBtn = display.newImage ('stopBtn .png ', 27, 282) stopBtn.isVisible = false prevBtn = display.newImage (' prevBtn.png ', 55, 279) nextBtn = display.newImage (' nextBtn.png ', 85, 279) progressBar = display.newImage ('progressBar.png', 126, 290) progress = display.newRoundedRect (0, 0, 100, 10, 3) voortgang: setFillColor (244, 204, 106) prog ress: setReferencePoint (display.TopLeftReferencePoint) progress.x = 126 progress.y = 290 progress.isVisible = false current = display.newText ('00: 00 ', 235, 288, native.systemFont, 9) huidig: setTextColor (246 , 237, 240) total = display.newText ('/ 00:00', 259, 288, native.systemFont, 9) total: setTextColor (191, 182, 183) playBtn: addEventListener ('tap', playCurrentSong) stopBtn: addEventListener ('tap', stopSong) nextBtn: addEventListener ('tap', nextSong) prevBtn: addEventListener ('tap', prevSong) einde

We voegen de tikluisteraars toe van de knoppen in de laatste regels en dit zorgt ervoor dat de knoppen de overeenkomstige functie uitvoeren wanneer ze worden aangeraakt.


Stap 5: speel de huidige song

Deze code wordt uitgevoerd wanneer op de afspeelknop wordt gedrukt.

Het reset de song- en tijdtellers (in het geval dat dit niet de eerste keer is dat de knop wordt ingedrukt) en speelt de song die is gespecificeerd door de currentSong variabel. Daarna, de spelen variabele is ingesteld op waar, Hiermee wordt het volgende of vorige nummer automatisch afgespeeld wanneer de volgende of vorige knoppen worden ingedrukt.

 function playCurrentSong: tik op (e) audio.rewind (liedjes [currentSong]) sec = 0 min = 0 audio.play (liedjes [currentSong]) spelen = true updateInfo () timerSource = timer.performWithDelay (1000, updateProgress, 0) playBtn .isVisible = false stopBtn.isVisible = true end

Het start ook de timer om de songduurteller te starten en verbergt de afspeelknop om de stopknop te onthullen.


Stap 6: stop het nummer

Wanneer op de stopknop wordt gedrukt, stopt het huidige nummer en wordt de timer geannuleerd. Knoppen worden teruggezet naar normaal en spelen ingesteld op vals.

 functie stopSong: tik (e) audio.stop () timer.cancel (timerSource) playBtn.isVisible = true stopBtn.isVisible = false playing = false end

Stap 7: Volgend nummer

Deze functie stopt de huidige song en verandert naar de volgende in de tabel, als de spelen variabele is ingesteld op
waar het zal het automatisch afspelen. Het controleert ook of het volgende nummer de laatste is, als dat het geval is, gaat het terug naar de eerste in de regel.

 functie nextSong: tik op (e) audio.stop () currentSong = currentSong + 1 if (currentSong> #songs) then currentSong = 1 end if (afspelen) en audio.rewind (songs [currentSong]) sec = 0 min = 0 audio .play (liedjes [currentSong]) eind updateInfo () einde

Stap 8: Vorige nummer

Zoals je je misschien kunt voorstellen gedraagt ​​deze functie zich op dezelfde manier als de vorige, alleen achteruit.

 functie vorige reeks: tik op (e) audio.stop () currentSong = currentSong - 1 if (currentSong < 1) then currentSong = #songs end if(playing) then audio.rewind(songs[currentSong]) sec = 0 min = 0 audio.play(songs[currentSong]) end updateInfo() end

Stap 9: Informatie bijwerken

Deze code (in de vorige drie functies genoemd) behandelt de informatie die in beide balken wordt weergegeven.

Het werkt de albumillustraties, de titel, de artiest en de tijden van de nummers bij.

 function updateInfo () titleText.text = tostring (currentSong)? '. '? songsInfo [currentSong] [2] titleText: setReferencePoint (display.TopLeftReferencePoint) titleText.x = 117 artistText.text = songsInfo [currentSong] [3] artistText: setReferencePoint (display.TopLeftReferencePoint) artistText.x = 137 display.remove (cdCover) cdCover = nihil local cdCover = display.newImage (songsInfo [currentSong] [4], 30, 178) local totalMin = math.floor (audio.getDuration (songs [currentSong]) / 1000/60) - local totalSec = math. floor (audio.getDuration (liedjes [currentSong]) / 1000% 60) - total.text = '/'? totalMin? ':'? totalSec-totaal: setReferencePoint (display.topLeftReferencePoint) total.x = 275 einde

Stap 10: voortgang bijwerken

Uitgevoerd elke seconde, werkt deze functie de voortgangsbalk van de song bij op basis van de huidige positie en de totale duur ervan.

Houd er rekening mee dat de methoden die worden gebruikt door de Corona API verschillende resultaten kunnen opleveren, afhankelijk van het formaat van de audiobestanden.

 functie updateProgress: timer (e) sec = sec + 1 if (sec == 60) dan sec = 0 min = min + 1 end local secS = tostring (sec) if (#secS < 2) then sec = '0'? sec end current.text = min? ':'? sec current:setReferencePoint(display.topLeftReferencePoint) current.x = 250 -- Progress Bar local position = min? sec position = position * 1000 local duration = audio.getDuration(songs[currentSong]) local percent = (position / duration) print(position, duration, percent) progress.isVisible = true progress.xScale = percent end

Stap 11: Roep de hoofdfunctie op

Om de app in eerste instantie te starten, is deHoofdEr moet een functie worden aangeroepen. Met de bovenstaande code op zijn plaats, doen we dat hier:

 Hoofd()

Stap 12: scherm laden

Het bestand Default.png is een afbeelding die juist wordt weergegeven wanneer u de toepassing start terwijl de iOS de basisgegevens laadt om het hoofdscherm weer te geven. Voeg deze afbeelding toe aan uw projectbronmap en deze wordt automatisch toegevoegd door de Corona-compileermachine.


Stap 13: Icoon

Met behulp van de afbeeldingen die u eerder hebt gemaakt, kunt u nu een mooi en goed uitziend pictogram maken. De pictogramgrootte voor het niet-retina-iPhone-pictogram is 57x57px, maar de netvliesversie is 114x114px en de iTunes-winkel heeft een 512x512px-versie nodig. Ik stel voor eerst de 512- 512-versie te maken en vervolgens de overige formaten te verkleinen.

Het hoeft niet de afgeronde hoeken of de transparante schittering te hebben, iTunes en de iPhone zullen dat voor je doen.


Stap 14: Testen in de simulator

Het is tijd om de laatste test te doen. Open de Corona Simulator, blader naar uw projectmap en klik vervolgens op Openen. Als alles werkt zoals verwacht, bent u klaar voor de laatste stap!


Stap 15: Bouw

Ga in de Corona Simulator naarBestand> Builden selecteer je doelapparaat. Vul de vereiste gegevens in en klik op

bouwen. Wacht een paar seconden en uw app is gereed voor apparaattesten en / of verzending voor distributie!


Conclusie

Experimenteer met het eindresultaat en probeer je aangepaste versie van de app te maken!

Ik hoop dat je deze tutorialserie leuk vond en het nuttig vond. Bedankt voor het lezen!