Tutorial:Using Input (Polski)

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