LOVE-pelisilmukka
load, update ja draw.
LOVE-pelisilmukka on ilmainen Lua Academy-oppitunti CoddyKitissä. Tämä on oppitunti 1/4. Voit lukea tästä oppimispolusta kokonaan mitkä tahansa 3 oppituntia ilmaiseksi — sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä käytännön harjoittelun sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. Oppitunti kuuluu Lua Academy-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. Lua Academy-kurssilla on yhteensä 4 oppituntia.
Mikä LÖVE on?
LÖVE (myös muodossa love2d) on ilmainen framework, jonka avulla voitte rakentaa 2D-pelejä puhtaalla Lua-kielellä. Kirjoitatte callback-funktioita, ja pelimoottori kutsuu niitä puolestanne.
LÖVE-peli sijaitsee kansiossa, jossa on main.lua-tiedosto. Käynnistätte sen komennolla love . kyseisestä kansiosta, jolloin moottori avaa ikkunan ja käynnistää silmukan.
Kolme keskeistä callbackia
LÖVE ohjaa peliänne kolmen main.lua-tiedostossa määrittelemänne callbackin avulla: love.load, love.update ja love.draw.
Ette kutsu niitä itse. Moottori kutsuu love.load-callbackia kerran ja toistaa sitten love.update- ja love.draw-callbackeja jokaisella ruudulla niin kauan kuin peli on käynnissä.
function love.load() end
function love.update(dt) end
function love.draw() endlove.load: Kertaluonteinen alustus
love.load suoritetaan täsmälleen kerran pelin käynnistyessä. Käyttäkää sitä tilan alustamiseen: ladatkaa kuvat ja fontit, luokaa taulukot ja alustakaa muuttujat ennen silmukan alkamista.
Kaikki raskaat toimenpiteet kannattaa tehdä tässä, ei love.update- tai love.draw-callbackeissa, jotta niitä ei toisteta jokaisella ruudulla.
function love.load()
player = { x = 100, y = 100, speed = 200 }
score = 0
endlove.update: Pelilogiikka
love.update(dt) suoritetaan kerran ruudulla, ja siinä käsitellään pelilogiikka: objektien liikuttaminen, törmäysten tarkistaminen, ajastimien päivittäminen ja syötteen tilan lukeminen.
dt-argumentti on delta-aika eli viimeisestä ruudusta kuluneet sekunnit. Älkää koskaan piirtäkö update-callbackissa, vaan pitäkää piirtäminen love.draw-callbackissa.
function love.update(dt)
player.x = player.x + player.speed * dt
endMiksi dt on tärkeä
Ruutunopeus vaihtelee laitteiden välillä. Jos liikuttaisitte objektia jokaisella ruudulla kiinteän määrän, nopea tietokone liikuttaisi objekteja nopeammin kuin hidas.
Kertominen dt:llä tekee liikkeestä ruutunopeudesta riippumatonta. speed * dt tarkoittaa "nopeusyksikköä sekunnissa", joten objekti kulkee saman matkan riippumatta siitä, kuinka monta ruutua piirretään.
-- 200 pixels per second, on any machine
player.x = player.x + 200 * dtlove.draw: Renderöinti
love.draw suoritetaan kerran ruudulla love.update-callbackin jälkeen. Kaikki näytöllä näkyvä piirretään tässä love.graphics-moduulin avulla.
Näyttö tyhjennetään automaattisesti ennen jokaista piirtoa, joten koko näkymä piirretään uudelleen jokaisella ruudulla nykyisen pelitilan perusteella.
function love.draw()
love.graphics.rectangle('fill', player.x, player.y, 32, 32)
endKoko silmukka yhdessä
Kun yhdistätte callbackit, saatte kokonaisen pelin: load alustaa pelaajan, update liikuttaa sitä dt:n avulla ja draw piirtää sen.
Tämä load-update-draw-sykli on jokaisen LÖVE-pelin sydän riippumatta siitä, kuinka monimutkaiseksi peli kasvaa.
function love.load() x = 0 end
function love.update(dt) x = x + 100 * dt end
function love.draw()
love.graphics.circle('fill', x, 150, 20)
endKellon lukeminen
Kerryttäkää dt-arvoa ajastimien muodostamiseksi. Tavallinen toimintamalli on kuluneen ajan summaaminen ja toimiminen, kun summa ylittää kynnysarvon, minkä jälkeen kynnysarvo vähennetään ajasta.
Tämä on luotettavampaa kuin ruutujen laskeminen, koska ruutujen määrä riippuu laitteistosta, kun taas dt seuraa todellisia sekunteja.
timer = 0
function love.update(dt)
timer = timer + dt
if timer >= 1 then
score = score + 1
timer = timer - 1
end
endlove.run ja silmukan sisäinen toiminta
Taustalla love.run on varsinainen pääsilmukka. Se kutsuu love.load-callbackia kerran ja toistaa sitten loputtomasti seuraavat vaiheet: käsittelee tapahtumat, laskee dt-arvon, kutsuu update- ja draw-callbackeja sekä näyttää ruudun.
love.run-callbackia ohitetaan harvoin, mutta sen olemassaolon tunteminen selittää, mistä dt ja callbackit tulevat.
-- simplified idea of love.run
-- love.load()
-- while true do
-- dt = timer.step()
-- love.update(dt)
-- love.draw()
-- endlove.quit ja elinkaari
LÖVE tarjoaa kolmen keskeisen callbackin lisäksi muitakin elinkaaricallbackeja. love.quit suoritetaan, kun pelaaja sulkee ikkunan, joten voitte tallentaa edistymisen.
Palauttamalla true-arvon love.quit-callbackista peruutatte sulkemisen. Muut callbackit, kuten love.focus ja love.resize, reagoivat ikkunan tapahtumiin.
function love.quit()
print('Saving before exit...')
return false -- false lets the game close
endPelin keskeyttäminen
Koska love.update ohjaa kaikkea logiikkaa, keskeyttäminen on helppoa: suojatkaa logiikka lippumuuttujalla ja ohittakaa se tauon aikana.
Piirtäminen jatkuu, joten voitte näyttää taukokerroksen. Tämä päivityksen ja piirtämisen erottelu on juuri se syy, miksi silmukan rakenne on niin joustava.
paused = false
function love.update(dt)
if paused then return end
player.x = player.x + player.speed * dt
endPikatarkistus
Testatkaa, miten hyvin ymmärrätte LÖVE-pelisilmukan.
Kertaus
LÖVE suorittaa pelinne callbackien avulla: love.load alustaa kaiken kerran, love.update(dt) käsittelee logiikan jokaisella ruudulla ja love.draw piirtää jokaisella ruudulla.
dt-arvo pitää liikkeen ruutunopeudesta riippumattomana, ja elinkaaricallbackit, kuten love.quit, täydentävät silmukan. Tämä sykli on jokaisen love2d-pelin perusta.
Opi Lua tekoälytuutorin avulla — ilmaiseksi
Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.
- Kurssit
- 40
- Oppitunnit
- 159
Usein kysytyt kysymykset
Onko oppitunti ”LOVE-pelisilmukka” ilmainen?
Kyllä — voit lukea täällä verkossa kokonaan ilmaiseksi mitkä tahansa Lua Academy-oppimispolun 3 oppituntia, myös oppitunnin “LOVE-pelisilmukka”. Sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä interaktiiviset harjoitukset sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. Lua Academy-kurssilla on yhteensä 4 oppituntia.
Mitä opin oppitunnilla ”LOVE-pelisilmukka”?
load, update ja draw. Harjoittelet Lua Academy-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.
Tarvitsenko kokemusta aloittaakseni Lua Academy-opiskelun?
Aiempi kokemus ei ole tarpeen. CoddyKitin Lua Academy-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 1/4.
Kuinka kauan ”LOVE-pelisilmukka”-oppitunnin suorittaminen kestää?
Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.
Voinko kirjoittaa ja suorittaa koodia tällä Lua Academy-oppitunnilla?
Kyllä. Jokainen Lua Academy-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.
Kaikki tämän kurssin oppitunnit
- LOVE-pelisilmukka
- Muotojen ja kuvien piirtäminen
- Syötteen käsittely
- Liike ja törmäykset