Views
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
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
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
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:
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
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
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
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
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
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:
graJestWstrzymana = not focus
end
function love.update(dt)
if graJestWstrzymana then return end
-- Pozostała część kodu love.update
end
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
Dansk –
Deutsch –
English –
Español –
Français –
Indonesia –
Italiano –
Lietuviškai –
Magyar –
Nederlands –
Polski –
Português –
Română –
Slovenský –
Suomi –
Svenska –
Türkçe –
Česky –
Ελληνικά –
Български –
Русский –
Српски –
Українська –
עברית –
ไทย –
日本語 –
正體中文 –
简体中文 –
Tiếng Việt –
한국어
More info