Difference between revisions of "Tutorial:Callback Functions (Polski)"

m (test change)
m (DAMN IT GIM)
Line 8: Line 8:
 
<source lang="lua">
 
<source lang="lua">
 
function love.load()
 
function love.load()
   image = love.graphics.newImage("cake.jpg")
+
   image = love.graphics.newImage("ciastko.jpg")
 
   local f = love.graphics.newFont(12)
 
   local f = love.graphics.newFont(12)
 
   love.graphics.setFont(f)
 
   love.graphics.setFont(f)
Line 21: Line 21:
 
function love.update(dt)
 
function love.update(dt)
 
   if love.keyboard.isDown("up") then
 
   if love.keyboard.isDown("up") then
       num = num + 100 * dt -- this would increment num by 100 per second
+
       num = num + 100 * dt -- zmienna num będzie zwiększana o 100 na sekundę
 
   end
 
   end
 
end
 
end
 
</source>
 
</source>
Funkcja ta jest wywoływana ciągle i jest to miejsce, gdzie prawdopodobnie znajdą się twoje obliczenia. 'dt' oznacza "[[love.timer.getDelta|czas delty]]" (ang '''d'''elta '''t'''ime) 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).  
+
Funkcja ta jest wywoływana ciągle i jest to miejsce, gdzie prawdopodobnie znajdą się twoje obliczenia. 'dt' oznacza "[[love.timer.getDelta|delta czasu]]" (ang '''d'''elta '''t'''ime) 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]]==
 
==[[love.draw]]==
Line 31: Line 31:
 
function love.draw()
 
function love.draw()
 
   love.graphics.draw(image, imgx, imgy)
 
   love.graphics.draw(image, imgx, imgy)
   love.graphics.print("Kliknij by przesunąć ciastko lub użyj klawiszy strzałek", 10, 10)
+
   love.graphics.print("Kliknij by przesunąć ciastko lub użyj klawiszy strzałek", 10, 10)
 
end
 
end
 
</source>
 
</source>
Line 41: Line 41:
  
 
function love.draw()
 
function love.draw()
   love.graphics.print("Ten tekst jest czarny z powodu ponizszej linijki", 100, 100)
+
   love.graphics.print("Ten tekst jest czarny z powodu poniższej linijki", 100, 100)
 
   love.graphics.setColor(255,0,0)
 
   love.graphics.setColor(255,0,0)
 
   love.graphics.print("Ten tekst jest czerwony", 100, 200)
 
   love.graphics.print("Ten tekst jest czerwony", 100, 200)
Line 74: Line 74:
 
function love.keypressed(klawisz, unicode)
 
function love.keypressed(klawisz, unicode)
 
   if klawisz == 'b' then
 
   if klawisz == 'b' then
       text = "Klawisz B zostal wcisniety."
+
       text = "Klawisz B zostal wciśnięty."
 
   elseif key == 'a' then
 
   elseif key == 'a' then
 
       a_down = true
 
       a_down = true
Line 86: Line 86:
 
function love.keyreleased(klawisz, unicode)
 
function love.keyreleased(klawisz, unicode)
 
   if klawisz == 'b' then
 
   if klawisz == 'b' then
       text = "Klawisz B zostal puszczony."
+
       text = "Klawisz B został puszczony."
 
   elseif key == 'a' then
 
   elseif key == 'a' then
 
       a_down = false
 
       a_down = false
Line 99: Line 99:
 
function love.focus(f)
 
function love.focus(f)
 
   if not f then
 
   if not f then
     print("stracono FOCUS")
+
     print("Schowano okienko :(")
 
   else
 
   else
     print("hurra mamy FOCUS")
+
     print("Dawno się nie widzieliśmy :)!")
 
   end
 
   end
 
end
 
end
 
</source>
 
</source>
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. Gra może otrzymać powiadomieni i może zostać automatycnie zapauzowana, jak poniżej:
+
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:
 
<source lang="lua">
 
<source lang="lua">
function love.focus(f) graJestWstrzymana = not f end
+
function love.focus(focus)
 +
        graJestWstrzymana = not focus
 +
end
  
 
function love.update(dt)
 
function love.update(dt)
 
if graJestWstrzymana then return end
 
if graJestWstrzymana then return end
  
-- Pozostała część kodu love.update jest poniżej
+
-- Pozostała część kodu love.update
 
end
 
end
 
</source>
 
</source>

Revision as of 18:21, 25 December 2013

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

function love.mousepressed(x, y, przycisk)
   if przycisk == 'l' 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

function love.mousereleased(x, y, przycisk)
   if przycisk == 'l' 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