În această serie de tutorial vom crea un joc Whack-a-Groundhog. Obiectivul jocului este de a atinge pe groundhogs înainte de a dispărea. Citește mai departe!
In partea anterioara a acestei serii am adaugat fundalul jocului si am inceput sa animam parintii nostri. În această parte finală a seriei, vom implementa gameplay-ul, opțiunile și vom începe ecranul aplicației noastre și apoi vom încheia cu un joc complet!
Pe masura ce jocul este acum, parintii se anima pentru totdeauna si nu par sa se intoarca in gaura lor. Trebuie să adăugăm mai multe chei pentru noi sequenceData
pentru a rezolva asta. Adăugați următoarele în cadrul setupGameScreen ()
funcţie:
secvența localăData = name = "arată", start = 2, count = 3, time = 800, loopCount = 1, loopDirection = "bounce" name = "hit1", start = 5, count = 1, name = "hit2", start = 6, count = 1, name = "hit3", start = 7, count = 1
Secvența "necompletată" este o imagine transparentă necompletată care face parte din foaia de sprite, iar secvențele "hit1", "hit2" și "hit3" sunt 3 stări diferite ale "hit-ului" de la sol. Uită-te la imaginea "groundhogsheet.png" pentru a vedea asta pentru tine.
Asigurați-vă că ați setat loopCount
egală cu 1 din secvența "spectacol".
Acum schimbați următorul bloc de coduri:
tempGroundHog: setSequence ("gol") tempGroundHog: addEventListener ('atinge', groundHogHit);
Aici am setat secvența la "necompletată" și am adăugat un ascultător la robinet.
Apoi, eliminați următorul rând de cod:
tempGroundHog: joaca ()
Dacă încercați acum, niciunul dintre paragate nu ar trebui să animeze. În curând vom obține o animație aventuroasă!
Atunci când se va atinge terenul, vom determina dacă a fost sau nu din gaură. În acest caz, vom schimba secvența sa la una din cele trei stări de succes pe care le-am adăugat în etapa anterioară.
Adăugați următoarele în interiorul groundHogHit ()
funcţie:
local thisSprite = e.target thisSprite: removeEventListener ("sprite", groundHogSpriteListener) funcția locală ascunde () thisSprite: setSequence ("blank") sfârșit dacă (thisSprite.sequence == "show"), apoi local randomIndex = math.random ) thisSprite: setSequence ("lovit" ... randomIndex) timer.performWithDelay (1000, ascunde) end
Aici facem referire la Sprite la care a făcut clic e.target
și eliminați ascultarea evenimentului. Apoi, verificăm dacă secvența sa este egală cu "arată". Dacă este, vom genera un număr între 1 și 3 și vom seta secvența sa egală cu "lovit" ... randomIndex
. Toate acestea nu este generarea șirurilor "hit1", "hit2" sau "hit3". În cele din urmă, numim funcția de ascundere locală după 1000 de milisecunde, care stabilește secvența Sprites la "blank".
getRandomGroundHog ()
funcția devine un paraget aleatoriu și îi permite să înceapă animarea. Introduceți următoarele în interiorul funcția getRandomGroundHog ()
:
(randomGroundHog.sequence ~ = "blank") apoi getRandomGroundHog () altceva randomGroundHog: addEventListener ("sprite", groundHogSpriteListener) randomGroundHog: setSequence (" ) randomGroundHog: sfârșitul jocului ()
Aici avem un a randomIndex
de la allGroundHogs
masa. Apoi, am setat randomGroundHog
egal cu indicele. Apoi, verificăm dacă secvența nu este egală cu "goală" și, dacă nu, ne sunăm getRandomGroundHog ()
din nou. În caz contrar, adăugăm groundHogSpriteListener
pentru a seta secvența sa "arată" și pentru a reda secvența.
groundHogSpriteListener ()
verifică dacă secvența "spectacol" a terminat de redat. Dacă da, o plasează în secvența "goală". Introduceți următoarele în cadrul groundHogSpriteListener ()
:
local ifSprite = event.target - "event.target" face trimitere la sprite if (event.phase == "ended"), atunci dacă (thisSprite.sequence == "show"), then thisSprite: setSequence - sfârșit de întârziere la jumătate de secundă
Cu toate cele de mai sus în loc, vom primi animații aleatorii Groundhogs. Adăugați următoarele în partea de jos a paginiisetUpGameScreen ()
funcţie:
groundHogTimer = timer.performWithDelay (groundHogSpeed, getRandomGroundHog, 0)
Dacă încercați acum, ar trebui să vedeți că solitorii izbucnesc aleatoriu din găurile lor. În timp ce sunteți acolo, încercați să faceți clic pe groundhogs în timp ce acestea sunt afară din găurile lor. Ar trebui să vedeți unul dintre cele 3 stări de succes, apoi starea goală.
Când ați terminat de testat, eliminați linia pe care tocmai ați introdus-o. Am nevoie doar de testare.
În acest pas vom începe să configurați ecranul intro. Introduceți următorul cod în interiorul setUpIntroScreen
funcţie:
media.playSound ("gameTrack.mp3", soundComplete) introScreenGroup = display.newGroup () titlul localScreen = display.newImage ("titleScreen.png") local playButton = display.newImage ("playButton.png" display.newImage ("optionsButton.png", 100,170) introScreenGroup: inserați (titleScreen) introScreenGroup: inserați (playButton) introScreenGroup: insert (optionsButton)
Aici începem coloana sonoră, configurați ecranul intro și adăugați playButton
și optionsButton
grafică.
Acum apelați setUpIntroScreen ()
funcția în cazul în care sunteți de asteptare setUpGameScreen ()
funcţie…
setUpGameScreen () setUpIntroScreen ()
Dacă încercați acum, ar trebui să vedeți Ecranul Intro. Trebuie să adăugăm Ascultați evenimente la butoane și asta vom face în pașii următori.
Introduceți următoarele sub codul introdus în pasul de mai sus:
playButton: addEventListener ("atinge", funcția () transition.to (introScreenGroup, time = 300, x = -480, onComplete = function () groundHogTimer = timer.performWithDelay (groundHogSpeed, getRandomGroundHog, 0) Sfârșit )
Când apăsați butonul de redare, animăm ecranul introductiv spre stânga, setați-ne groundHogTimer
pentru a genera paranteze aleatorii, apoi setați se joacă
variabilă la adevărat.
Dacă încercați acum, ar trebui să puteți începe un nou joc, dar dorim ca și unele opțiuni să fie disponibile. O să facem asta în continuare.
Introduceți următoarele sub codul pe care l-ați introdus în pasul de mai sus.
optiuneaButton: addEventListener ("atinge", functia () transition.to (optiuneaScreenGroup, time = 300, y = 0, onComplete = function () introScreenGroup.
Acest cod animă ecranul cu opțiuni de mai sus. Când animația este finalizată, aceasta se pune introScreenGroup
opriți ecranul principal spre stânga.
Dacă încercați acum și apăsați butonul de opțiuni, nu veți vedea nimic să se întâmple, și asta pentru că nu am creat încă ecranul cu opțiuni.
Introduceți următoarele în interiorul setUpOptionsScreen ()
funcţie:
optiuniScreenGroup = display.newGroup () optiuni localeScreen = display.newImage ("optionsScreen.png") local backButton = display.newImage ("backButton.png", 130,240) local soundOnText = display.newText , native.systemFontBold, 16) locale groundHogSpeedText = display.newText ("Speed", 75,145, native.systemFontBold, 16) optionsScreenGroup: inserați opțiunileScreen opțiuniScreenGroup: inserați opțiunea BackButtonScreenGroup: inserați (soundOnText) optionsScreenGroup: insert (groundHogSpeedText) optionsScreenGroup.y = -325
Aici am setat optionsScreen
, adaugă backButton
, și adăugați câteva texte.
Acum, apelați această funcție în locul unde vă sunați setUpIntroScreen
:
setUpIntroScreen () setUpOptionsScreen ()
Dacă încercați jocul acum, ar trebui să vedeți ecranul de opțiuni alunecând de sus.
Vom folosi widgetul pentru căsuță pentru a permite utilizatorului să pornească / dezactiveze sunetul. Introduceți următoarele în partea de sus a fișierului "main.lua".
widget local = necesită ("widget")
Pentru a putea utiliza comutatorul și alte widget-uri, trebuie mai întâi să solicităm modulul "widget"
Acum introduceți următoarele sub codul introdus mai sus în setUpOptionsScreen
.
sunetul local = soundtrack = widget.newSwitch left = 210, top = 98, style = "checkbox", initialSwitchState = true, onPress = .mp3 ", soundComplete) altceva media.stopSound () end end optionsScreenGroup: insert (soundCheckBox)
Se instalează widget-ul nostru de casete, setând "stil" egal cu "caseta de selectare". Verificăm dacă caseta de selectare Ison
(dacă este selectat), și dacă este așa, vom juca "gameTrack.mp3". Dacă nu, oprim sunetul.
Dacă încercați acum și mergeți la ecranul de opțiuni, ar trebui să puteți activa sau dezactiva sunetul.
Utilizăm un SegmentedControl pentru a permite utilizatorului să aleagă cât de repede ar trebui să apară terenul GroundHog. Introduceți următoarele sub codul căsuței de bifare introduse în pasul de mai sus:
locală speedControl = widget.newSegmentedControl left = 210, top = 140, segmente = "lent", "mediu", "rapid", segmentWidth = 50, defaultSegment = 1, onPress = function (target.segmentNumber == 1) apoi groundHogSpeed = 1500 elseif (target.segmentNumber == 2) apoi groundHogSpeed = 1000 altfel groundHogSpeed = 700 end end optionsScreenGroup: insert (speedControl)
Aici vom crea un SegmentedControl cu 3 segmente ("lent", "mediu", "rapid"). În funcție de segmentul pe care utilizatorul l-a apăsat, setăm groundHogSpeed
variabilă în consecință.
Dacă testați acum, ar trebui să vedeți SegmentedControl și să puteți selecta un segment, dar trebuie să conectăm butonul din spate pentru a reveni la ecranul intro.
backButton
ne duce înapoi la ecranul intro. Introduceți următorul cod sub pasul de mai sus:
backButton: addEventListener ("apăsați", funcția () dacă (isPlaying == false), apoi introScreenGroup.x = 0 end transition.to (opțiuneaScreenGroup, time = 300, y = = true) apoi groundHogTimer = timer.performWithDelay (groundHogSpeed, getRandomGroundHog, 0) capăt sfârșit sfârșit)
Aici verificăm dacă jocul a început. Dacă nu, am pus introScreenGroup
înapoi în zona de joc. Apoi tranziționăm ecranul opțiunilor. Dacă jocul a început, am setat groundHogtimer
pentru a genera pisici de sol.
Trebuie să reușim să ajungem la ecranul de opțiuni din ecranul principal al jocului. Adăugați următoarele sub locul în care introduceți gameBackground
în gameScreenGroup ()
.
gameScreenGroup: inserați (gameBackground) opțiunile localeButton = display.newImage ("optionsButton.png", 1.270) gameScreenGroup: insert (optionsButton)
Dacă încercați acum, ar trebui să vedeți butonul de opțiuni de pe ecranul jocului.
Acum trebuie să conectăm butonul de opțiuni cu un EventListener. Pentru a face acest lucru, introduceți codul de mai jos sub buclă care creează toate groundhogs.
opțiuneaButton: addEventListener ("atinge", funcția (e) temporer.cancel (groundHogTimer) transition.to (opțiuneaScreenGroup, time = 300, y = 0, endComplete =
Aici anulează groundHogTimer
și trecerea ecranului opțiunilor noastre în jos.
Încercați acum, ar trebui să puteți accesa ecranul de opțiuni din ecranul de joc. De asemenea, trebuie să puteți seta opțiunile dorite.
Dacă ați jucat suficient de mult pentru ca coloana sonoră să se termine, este posibil să fi observat că nu a început din nou. Introduceți următoarele în cadrul soundComplete ()
funcţie.
media.playSound ("gameTrack.mp3", soundComplete)
Acest lucru pornește din nou coloana sonoră redând din nou după ce a terminat.
În această serie, am învățat cum să creăm un joc distractiv și interesant Whack-a-Groundhog. În acest fel, ați învățat cum să utilizați coli și sunete sprite. Sper că ați găsit acest tutorial util, și mulțumesc pentru lectură!