Lua Academy · Les

Invoer afhandelen

Reageer op toetsen en muis.

Les 3 van 413 stappen

Invoer afhandelen is een gratis Lua Academy-les op CoddyKit. Dit is les 3 van 4. Je kunt 3 lessen uit dit leerpad gratis volledig lezen — daarna ontgrendelt CoddyKit PRO alle lessen, plus praktische oefeningen met een ingebouwde code-editor en een AI-tutor die 24/7 beschikbaar is. Deze les maakt deel uit van het leertraject Lua Academy. Je voortgang wordt gesynchroniseerd op het web en in de CoddyKit-app. De cursus Lua Academy bevat in totaal 4 lessen.

Twee manieren om invoer te lezen

LÖVE biedt twee manieren om invoer te verwerken. Bij pollen vraag je elk frame: “is deze toets nu ingedrukt?” Dit is ideaal voor doorlopende acties zoals bewegen.

Gebeurtenissen zijn terugbelfuncties die één keer worden uitgevoerd wanneer er iets gebeurt, zoals love.keypressed. Ze zijn ideaal voor eenmalige acties zoals springen of schieten.

Het toetsenbord pollen

love.keyboard.isDown(key) geeft true terug zolang een toets ingedrukt blijft. Roep deze functie aan binnen love.update voor een vloeiende, doorlopende reactie.

Omdat de toets elk frame wordt gecontroleerd, blijft de actie doorgaan zolang je de toets ingedrukt houdt. Dit past natuurlijk bij het besturen van een speler.

function love.update(dt)
  if love.keyboard.isDown('right') then
    player.x = player.x + player.speed * dt
  end
end

Meerdere toetsen controleren

love.keyboard.isDown accepteert meerdere toetsen tegelijk en geeft true terug als een van de toetsen ingedrukt is. Dat is handig voor alternatieve toetskoppelingen.

Je kunt ook afzonderlijke controles aan elkaar koppelen om elke richting onafhankelijk af te handelen voor volledige beweging in vier richtingen.

function love.update(dt)
  if love.keyboard.isDown('a', 'left') then
    player.x = player.x - player.speed * dt
  end
  if love.keyboard.isDown('d', 'right') then
    player.x = player.x + player.speed * dt
  end
end

De gebeurtenis keypressed

love.keypressed(key) wordt precies één keer uitgevoerd op het moment dat een toets wordt ingedrukt. Gebruik dit voor acties die niet mogen worden herhaald zolang de toets ingedrukt blijft, zoals springen of pauzeren.

De engine geeft de naam van de toets door als tekenreeks, zodat je die kunt vergelijken met namen zoals 'space' of 'escape'.

function love.keypressed(key)
  if key == 'space' then
    player.jumping = true
  end
end

Afsluiten met Escape

Een veelgebruikt patroon is het sluiten van het spel wanneer de speler op Escape drukt. love.event.quit sluit de engine netjes af.

Omdat keypressed één keer per druk wordt uitgevoerd, voorkom je hiermee onbedoelde herhaalde acties wanneer je de toets ingedrukt houdt.

function love.keypressed(key)
  if key == 'escape' then
    love.event.quit()
  end
end

keyreleased

love.keyreleased(key) wordt één keer uitgevoerd wanneer een toets wordt losgelaten. Door dit te combineren met keypressed kun je ingedrukte toestanden zelf bijhouden.

Dit is handig voor laadmechanismen: begin met laden wanneer de toets wordt ingedrukt en voer de actie uit bij het loslaten. Meet daarbij hoelang de toets ingedrukt was.

function love.keypressed(key)
  if key == 'space' then chargeStart = love.timer.getTime() end
end
function love.keyreleased(key)
  if key == 'space' then power = love.timer.getTime() - chargeStart end
end

Muispositie

love.mouse.getPosition geeft de huidige x- en y-positie van de cursor terug binnen love.update of love.draw. Je kunt ook afzonderlijk getX en getY gebruiken.

De coördinaten komen overeen met de tekenruimte: de oorsprong bevindt zich linksboven en y neemt naar beneden toe.

function love.update(dt)
  local mx, my = love.mouse.getPosition()
  crosshair.x, crosshair.y = mx, my
end

Muisknoppen

Controleer knoppen met love.mouse.isDown(1). Hierbij is 1 de linkermuisknop, 2 de rechtermuisknop en 3 de middelste muisknop.

Gebruik voor afzonderlijke klikken de gebeurtenis love.mousepressed(x, y, button). Deze wordt één keer uitgevoerd en geeft de klikcoördinaten rechtstreeks door.

function love.mousepressed(x, y, button)
  if button == 1 then
    spawnAt(x, y)
  end
end

Tekstinvoer

Voor typen geeft love.textinput(text) het daadwerkelijke teken door, rekening houdend met de indeling en modificatietoetsen. Dit is beter dan keypressed voor het bouwen van tekstvelden.

Gebruik keypressed daarnaast om speciale toetsen zoals Backspace en Enter af te handelen, omdat textinput deze niet doorgeeft.

function love.textinput(t)
  inputBuffer = inputBuffer .. t
end

Polling en gebeurtenissen combineren

Echte spellen combineren beide manieren: controleer bewegingstoetsen elk frame in love.update, terwijl eenmalige acties in gebeurtenis-terugelfuncties staan.

Door de juiste manier te kiezen voorkom je fouten. Als je in update op springen controleert, wordt de actie elk frame uitgevoerd zolang de toets ingedrukt blijft; een gebeurtenis voert de actie zoals bedoeld één keer uit.

function love.update(dt)
  if love.keyboard.isDown('left') then player.x = player.x - 200*dt end
end
function love.keypressed(key)
  if key == 'up' then jump() end
end

Basisbeginselen van gamepads

LÖVE ondersteunt ook gamepads via de joystick-API. Met love.joystickpressed en isGamepadDown van een joystick kun je knoppen uitlezen.

Analoge sticks geven via getGamepadAxis waarden van -1 tot 1 terug, zodat je beweging vloeiend kunt schalen, net als bij het pollen van het toetsenbord met dt.

function love.update(dt)
  if joystick then
    local ax = joystick:getGamepadAxis('leftx')
    player.x = player.x + ax * player.speed * dt
  end
end

Korte toets

Toets je begrip van invoerafhandeling in LÖVE.

Samenvatting

Invoer in LÖVE komt in twee vormen: gebruik love.keyboard.isDown en love.mouse.isDown voor doorlopende acties en reageer op gebeurtenis-terugelfuncties zoals love.keypressed en love.mousepressed voor eenmalige acties.

De API's voor muis, tekst en gamepads maken het geheel compleet. Door de juiste manier te kiezen blijven de besturingen responsief en vrij van fouten.

Gratis beginnen

Leer Lua met een AI-tutor — gratis

Schrijf echte code en voer die uit in je browser, krijg direct hulp van een AI-tutor die 24/7 beschikbaar is en ga verder waar je gebleven bent op het web of in de app.

Cursussen
40
Lessen
159

Veelgestelde vragen

Is de les “Invoer afhandelen” gratis?

Ja — je kunt hier op het web alle 3 lessen van het leerpad Lua Academy, waaronder “Invoer afhandelen”, gratis volledig lezen. Daarna ontgrendelt CoddyKit PRO alle lessen, plus interactieve oefeningen met een ingebouwde code-editor en een AI-tutor die 24/7 beschikbaar is. De cursus Lua Academy bevat in totaal 4 lessen.

Wat leer ik in “Invoer afhandelen”?

Reageer op toetsen en muis. Je oefent met Lua Academy door code rechtstreeks in de browser uit te voeren. Een AI-begeleider die 24/7 beschikbaar is beantwoordt je vragen terwijl je de les doorwerkt.

Heb ik ervaring nodig om met Lua Academy te beginnen?

Ervaring vooraf is niet nodig. Lua Academy op CoddyKit is opgebouwd voor beginners tot gevorderden, zodat je hier of bij het begin kunt starten en in je eigen tempo kunt leren. Dit is les 3 van 4.

Hoe lang duurt de les “Invoer afhandelen”?

De meeste lessen van CoddyKit duren ongeveer 5–10 minuten. Elke les is kort en interactief, zodat je gestaag vooruitgaat en op het web en in de app precies verdergaat waar je was gebleven.

Kan ik code schrijven en uitvoeren in deze les over Lua Academy?

Ja. Elke les over Lua Academy bevat een ingebouwde code-editor, zodat je rechtstreeks in je browser echte code kunt schrijven en uitvoeren en direct feedback van AI krijgt — lokale installatie is niet nodig.

Alle lessen in deze cursus

  1. De LOVE-game-loop
  2. Vormen en afbeeldingen tekenen
  3. Invoer afhandelen
  4. Beweging en botsingen
← Terug naar Lua Academy