Tutorial:Callback Functions (Polski)

Callbacki (funkcje o specjalnych nazwach) są wywoływane przez LÖVE z funkcji love.run, by wykonywać różne zadania. Wszystkie callbacki są opcjonalne, jednak w pełni rozbudowana gra prawdopodobnie będzie wykorzystywać je wszystkie, tak więc dobrze jest wiedzieć co robią.

Tym, którzy dopiero rozpoczynają przygodę z programowaniem lub dla których termin callback jest obcy, należy się wyjaśnienie. Callback to funkcja, która działa w pewnym sensie odwrotnie. W przypadku normalnych funkcji, takich jak love.graphics.draw, czy math.floor, wywołanie którejś z nich powoduje że LÖVE czy lua coś robią. Z drugiej strony, callback (wywołanie zwrotne) jest to funkcja, którą należy napisać i będzie ona wywoływna przez LÖVE w określonych momentach. To ułatwia utrzymanie porządku w kodzie. Na przykład: ponieważ callback love.load jest wywoływany tylko raz, kiedy gra jest uruchamiana (przed jakimikolwiek innymi callbackami), jest to dobre miejsce, by umieścić w nim kod który załaduję grę i przygotuje wszystko co niezbędne.

love.load

function love.load()
   image = love.graphics.newImage("ciastko.jpg")
   local f = love.graphics.newFont(12)
   love.graphics.setFont(f)
   love.graphics.setColor(0,0,0,255)
   love.graphics.setBackgroundColor(255,255,255)
end

Funkcja ta jest wywoływana tylko raz, kiedy gra startuje. Zwykle w jej wnętrzu ładuje się zasoby (dźwięki, grafiki), inicjalizuje zmienne i przygotowuje ustawienia. Wszystkie te czynności można wykonać gdzie indziej, ale wykonanie ich w tym callbacku oznacza, że będą wykonane tylko raz, co może zoszczędzić zasobów systemowych.

love.update

function love.update(dt)
   if love.keyboard.isDown("up") then
      num = num + 100 * dt -- zmienna num będzie zwiększana o 100 na sekundę
   end
end

Funkcja ta jest wywoływana ciągle i jest to miejsce, gdzie prawdopodobnie znajdą się twoje obliczenia. 'dt' oznacza "delta czasu" (ang delta time) i jest to ilość sekund, jaka upłynęła od poprzedniego wywołania tego callbacka. (zwykle będzie to wartość rzędu setnych sekundy jak 0.025714).

love.draw

function love.draw()
   love.graphics.draw(image, imgx, imgy)
   love.graphics.print("Kliknij by przesunąć ciastko lub użyj klawiszy strzałek", 10, 10)
end

love.draw to callback w którym odbywa się rysowanie. Jeśli wywołasz którą funkcji z modułu love.graphics.draw spoza tej funkcji, nie da to żadnych efektów. Ten callback jest również wywoływany ciągle, więc weź pod uwagę, że zmiany czcionki/koloru/trybu/itd. wykonane pod koniec tej funkcji, będą miały skutki na początku jej kolejnego wywołania. Na przykład:

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

function love.draw()
   love.graphics.print("Ten tekst jest czarny z powodu poniższej linijki", 100, 100)
   love.graphics.setColor(255,0,0)
   love.graphics.print("Ten tekst jest czerwony", 100, 200)
end

love.mousepressed

Available since LÖVE 0.10.0
This variant is not supported in earlier versions.
function love.mousepressed(x, y, przycisk, istouch)
   if przycisk == 1 then
      imgx = x -- zmień współrzędne obrazka, przy kliknięciu
      imgy = y
   end
end

Ta funkcja jest wywoływana, kiedy został naciśnięty przycisk myszy, otrzymuje ona współrzędne myszy (x, y) oraz przycisk, który został naciśnięty. Przycisk jest dowolną ze stałych. Ta funkcja dobrze współgra wraz z love.mousereleased.

love.mousereleased

Available since LÖVE 0.10.0
This variant is not supported in earlier versions.
function love.mousereleased(x, y, przycisk, istouch)
   if przycisk == 1 then
      strzelZProcy(x,y) -- ta odlotowa funkcja jest ''gdzieś'' zdefiniowana
   end
end

Ta funkcja jest wywoływana, kiedy został zwolniony przycisk myszy, otrzymuje ona współrzędne gdzie nastąpiło zwolnienie przycisku (x, y) oraz przycisk, który został naciśnięty. Przycisk jest dowolną ze stałych. Możesz jej używać wraz z love.mousepressed lub osobno, nie są one od siebie zależne.

love.keypressed

function love.keypressed(klawisz, unicode)
   if klawisz == 'b' then
      text = "Klawisz B zostal wciśnięty."
   elseif key == 'a' then
      a_down = true
   end
end

Ta funkcja jest wywoływana, kiedy został naciśnięty klawisz na klawiaturze, otrzymuje ona klawisz, który został wciśnięty. Klawisz jest dowolną ze stałych. Ta funkcja dobrze współgra wraz z love.keyreleased.

love.keyreleased

function love.keyreleased(klawisz, unicode)
   if klawisz == 'b' then
      text = "Klawisz B został puszczony."
   elseif key == 'a' then
      a_down = false
   end
end

Ta funkcja jest wywoływana, kiedy został zwolniony klawisz na klawiaturze, klawisz, który został wciśnięty. Możesz jej używać wraz z love.keypressed lub osobno, nie są one od siebie zależne.

love.focus

function love.focus(f)
  if not f then
    print("Schowano okienko :(")
  else
    print("Dawno się nie widzieliśmy :)!")
  end
end

Ta funkcja jest wywoływana, gdy, ktoś kliknie poza oknem LÖVE (utrata focusu), lub wróci do okna LÖVE (odzyskanie focusu). Na przykład, gdy użytkownik gra w okienku, i kliknie w okno swojej przeglądarki, lub zminimalizuje okno gry. Gra może otrzymać powiadomienie i może zostać automatycnie zapauzowana, jak poniżej:

function love.focus(focus)
        graJestWstrzymana = not focus
end

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

	-- Pozostała część kodu love.update
end

love.quit

function love.quit()
  print("Dzięki za grę! Wpadnij znów!")
end

Funkcja ta jeat wołana, gdy użytkownik kliknie przycisk zamykający okno (często X). Na przykład, gracz skończył grać i zamyka okno. Wówczas, zanim zostanie ono zamknięte, gra może zapisać swój stan (np postęp w grze).

To są funkcje callback i ich podstawowe użycie.



Other languages