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.
Contents
love.load
function love.load()
image = love.graphics.newImage("cake.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 -- this would increment num by 100 per second
end
end
Funkcja ta jest wywoływana ciągle i jest to miejsce, gdzie prawdopodobnie znajdą się twoje obliczenia. 'dt' oznacza "czas delty" (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 ponizszej 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 wcisniety."
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 zostal 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("stracono FOCUS")
else
print("hurra mamy FOCUS")
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. Gra może otrzymać powiadomieni i może zostać automatycnie zapauzowana, jak poniżej:
function love.focus(f) graJestWstrzymana = not f end
function love.update(dt)
if graJestWstrzymana then return end
-- Pozostała część kodu love.update jest poniżej
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
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