Tutorial:Callback Functions (Italiano)

Le funzioni di callback (richiamo) in LÖVE sono chiamate da love.run per eseguire diversi compiti e sono tutte opzionali. A ogni modo, un'esperienza di gioco completa probabilmente richiederà che siano utilizzate tutte, quindi è saggio conoscerle.

Una callback, per chi è nuovo nella programmazione o poco familiare con il termine, è una funzione che lavora al contrario in un senso. Una funzione regolare come love.graphics.draw o math.floor viene chiamata e LÖVE o Lua fanno qualcosa. Una callback, invece, è una funzione che tu scrivi e LÖVE chiama in certi momenti. Questa rende semplice mantenere il codice organizzato e ottimale. Per esempio, visto che love.load verrà chiamata solo una volta quando il gioco viene avviato per la prima volta (prima di ogni altra callback), è un buon posto per mettere il codice che carica il contenuto del gioco o che prepara il tutto.

love.load

function love.load()
   image = love.graphics.newImage("cake.jpg")
   love.graphics.setNewFont(12)
   love.graphics.setColor(0,0,0)
   love.graphics.setBackgroundColor(255,255,255)
end

Questa funzione viene chiamata una sola volta, quando il gioco è avviato, ed è il posto dove di solito si caricano le risorse, si inizializzano le variabili e si stabiliscono delle impostazioni specifiche. Tutte queste cose possono essere fatte anche in qualsiasi altro posto, ma in questo modo vengono eseguite solo una volta, salvando molte risorse di sistema.

love.update

function love.update(dt)
   if love.keyboard.isDown("up") then
      num = num + 100 * dt -- in questo modo si incrementa num di 100 ogni secondo
   end
end

Questa funzione è chiamata continuamente e probabilmente sarà il posto dove i calcoli matematici vengono svolti. 'dt' sta per "delta time" (differenza di tempo) ed è la quantità di secondi passati dall'ultima volta che questa funzione è stata chiamata (che è normalmente un valore piccolo come 0.025714).

love.draw

function love.draw()
   love.graphics.draw(image, imgx, imgy)
   love.graphics.print("Click and drag the cake around or use the arrow keys", 10, 10)
end

love.draw is where all the drawing happens (if that wasn't obvious enough already) and if you call any of the love.graphics.draw outside of this function then it's not going to have any effect. This function is also called continuously so keep in mind that if you change the font/color/mode/etc at the end of the function then it will have a effect on things at the beginning of the function. For example:

function love.load()
   love.graphics.setColor(0,0,0)
end

function love.draw()
   love.graphics.print("This text is not black because of the line below", 100, 100)
   love.graphics.setColor(255,0,0)
   love.graphics.print("This text is red", 100, 200)
end

love.mousepressed

function love.mousepressed(x, y, button)
   if button == 'l' then
      imgx = x -- move image to where mouse clicked
      imgy = y
   end
end

This function is called whenever a mouse button is pressed and it receives the button and the coordinates of where it was pressed. The button can be any of the constants. This function goes very well along with love.mousereleased.

love.mousereleased

function love.mousereleased(x, y, button)
   if button == 'l' then
      fireSlingshot(x,y) -- this totally awesome custom function is defined elsewhere
   end
end

This function is called whenever a mouse button is released and it receives the button and the coordinates of where it was released. You can have this function together with love.mousepressed or separate, they aren't connected in any way.


love.keypressed

function love.keypressed(key)
   if key == 'b' then
      text = "The B key was pressed."
   elseif key == 'a' then
      a_down = true
   end
end

This function is called whenever a keyboard key is pressed and receives the key that was pressed. The key can be any of the constants. This functions goes very well along with love.keyreleased.

love.keyreleased

function love.keyreleased(key)
   if key == 'b' then
      text = "The B key was released."
   elseif key == 'a' then
      a_down = false
   end
end

This function is called whenever a keyboard key is released and receives the key that was released. You can have this function together with love.keypressed or separate, they aren't connected in any way.

love.focus

function love.focus(f)
  if not f then
    print("LOST FOCUS")
  else
    print("GAINED FOCUS")
  end
end

This function is called whenever the user clicks off and on the LÖVE window. For instance, if they are playing a windowed game and a user clicks on his Internet browser, the game could be notified and automatically pause the game.

function love.focus(f) gameIsPaused = not f end

function love.update(dt)
	if gameIsPaused then return end

	-- The rest of your love.update code goes here
end

love.quit

function love.quit()
  print("Thanks for playing! Come back soon!")
end

This function is called whenever the user clicks the windows close button (often an X). For instance, if the user decides they are done playing, they could click the close button. Then, before it closes, the game can save its state.

Those are the callback functions and their basic usage.


Other languages