Difference between revisions of "Tutorial:Using Input (Polski)"
(lajkaboss) |
|||
Line 144: | Line 144: | ||
{{#set:LOVE Version=0.6.0}} | {{#set:LOVE Version=0.6.0}} | ||
− | {{#set:Description= | + | {{#set:Description=Obsługa klawiatury i myszy}} |
== Other Languages == | == Other Languages == | ||
{{i18n|Tutorial:Using Input}} | {{i18n|Tutorial:Using Input}} |
Latest revision as of 19:45, 8 December 2013
Obsługa zdarzeń wejściowych w LÖVE jest bardzo prosta; w tym poradniku zajmiemy się przechwytywanim zdarzeń klawiatury u myszy zarówno przy pomocy funkcji jak i callbacków.
Zaczniemy od stworzenia prawie pustego programu dla LÖVE:
local text
function love.load()
love.graphics.setNewFont(12)
text = "Jak na razie - nic"
end
function love.update(dt)
end
function love.draw()
love.graphics.print(text, 330, 300)
end
Przechwytywanie zdarzeń klawiatury
Najprostszym sposobem na sprawdzenie czy użytkownik naciska klawisz, jest użycie funkcji love.keyboard.isDown
która ma następującą składnię:
love.keyboard.isDown(klawisz)
Parameter klawisz to string odpowiadający klawiszowi, który chcemy przetestować. Prosty przykład:
if love.keyboard.isDown(" ") then
text = "SPACJA jest aktualnie trzymana!"
end
Pełną listę obsługiwanych klawiszy znajdziesz na liście tutaj. Najlepsze miejsce na wywołanie powyższege sprawdzenia, to callback love.update
: w ten sposób można sprawdzić działanie użytkownika i zaktualizować wartości zmiennych przed rysowaniem czegokolwiek na ekranie. Tak więc zmodyfikowana funkcja love.update
wygląda terdz następująco:
function love.update(dt)
if love.keyboard.isDown(" ") then
text = "SPACJA jest aktualnie trzymana!"
end
end
Wszystko jest w porządku, jeśli jedyna potrzebna rzecz, to informacja który klawisz lub klawisze są wciśnięte. Bardziej przydatne będzie wiedzieć kiedy dany klawisz został puszczony i /lub zwolniony, jak również możliwość obsługi tych zdarzeń na różne sposoby. Jednak bardziej eleganckie jest zrobienie tego z użyciem callbacków klawiatury love.keypressed
oraz love.keyreleased
. Działają one w podobny sposób jak pokazane powyżej callbacki love.update
czy love.draw
, ich kod jest wywoływany za każdym razem, kiedy dochodzi do zdarzenia. Na przykład:
function love.keypressed(klawisz, unicode)
if klawisz == "return" then
text = "Enter został naciśnięty!"
end
end
function love.keyreleased(klawisz, unicode)
if klawisz == "return" then
text = "Enter został puszczony!"
end
end
Jak widać powyżej, te dwa callbacki, przyjmują argument klawisz, którego można użyć do sprawdzenia czy dany klawisz został wciśnięty lub puszczony.
Do tego miejsca, wod powinien wyglądać w następujący sposób:
function love.load()
love.graphics.setNewFont(12)
text = "Jak na razie - nic"
end
function love.update(dt)
if love.keyboard.isDown(" ") then
text = "SPACJA jest aktualnie trzymana!"
end
end
function love.draw()
love.graphics.print(text, 330, 300)
end
function love.keypressed(klawisz, unicode)
if klawisz == "return" then
text = "Enter został naciśnięty!"
end
end
function love.keyreleased(klawisz, unicode)
if klawisz == "return" then
text = "Enter został puszczony!"
end
end
Przechwytywanie zdarzeń myszy
Wiemy już, jak użytkownik może oddziaływać za pomocą klawiatury. Ale co z małym gryzoniem, który siedzi na ich biurkach? Zdarzenia myszy działają na analogicznej zasadzie.: mamy funkcję (odpytującą) love.mouse.isDown
oraz callbacki love.mousepressed
oraz love.mousereleased
. Dodajmy kilka linii w callbacku love.update
:
if love.mouse.isDown("r") then
text = "Prawy klawisz myszy został naciśnięty"
end
Jak widać, to bardzo podobne do funkcji love.keyboard.isDown
. Pełną listę stałych związanych z myszką możesz zobaczyć tutaj. Używając powyższej metody, można nawet sprawdzić, czy rolwa myszy została przesunięta w górę lub w dół. Mamy również dwie użyteczne metody, do okeślenia pozycji kursora myszki wewnąrz okna gry: love.mouse.getX
oraz love.mouse.getY
. Każda zwraca aktualną koordynatę kursora. Zobaczmy to na przykładzie dodając do callbacka love.update
kod:
mouse_x = love.mouse.getX()
mouse_y = love.mouse.getY()
Oraz wewnątrz callbacka love.draw
:
love.graphics.print( "Mouse X: ".. mouse_x .. " Mouse Y: " .. mouse_y, 10, 20 )
Callbacki love.mousepressed
oraz love.mousereleased
działają podobnie jak ich klawiaturowi kuzyni:
function love.mousepressed(x, y, przycisk)
if przycisk == 'l' then
text = "Lewy przycisk myszy został naciśnięty"
end
end
function love.mousereleased(x, y, przycisk)
if przycisk == 'l' then
text = "Lewy przycisk myszy został puszczony"
end
end
Miłą cechą tych callbacków jest oprócz informacji który klawisz został naciśnięty lub puszczony, informacja gdzie był kursor w momncie zdarzenia. To może być bardzo pożyteczne, jeśli potrzebujesz zrobić jakiś podstawowy interfejs użytkownika, gdzie na elementach takich jak guziki można operować myszą. Prosty przykład:
function love.mousepressed(x, y, przycisk)
if przycisk == 'l' then
text = "Lewy przycisk myszy został naciśnięty w X:"..x.." Y: "..y
end
end
Na koniec mamy jeszcze dwie użyteczne metody związane z myszkąlove.mouse.setVisible
oraz love.mouse.isVisible
. Pierwsza pozwala schować lub pokazać kursor myszy, druga pozwala sprawdzić czy jest on aktualnie widoczny, czy nie.
Dodajmy jeszcze kawałek w callbacku klawiatury love.keypressed
:
if klawisz == 'h' then
if love.mouse.isVisible() then
love.mouse.setVisible(false)
else
love.mouse.setVisible(true)
end
-- lub alternatywnie:
-- love.mouse.setVisible(not love.mouse.isVisible())
end
Te pare linijek, przy naciśnięciu klawisza 'H' sprawdza czy kursor myszy jest widoczny, jeśli tak ukrywa go, jeśli nie pokazuje go. Banalne, prawda?!
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