Tutorial:Using Input (Português)

Capturar eventos de entrada de dados com LÖVE é bastante simples. Neste tutorial vamos apresentar uma forma de capturar eventos do teclado e do mouse, utilizando os métodos e callbacks de ambos objetos. Vamos começar nosso tutorial inserindo este pequeno trecho de código em um arquivo vazio:

local texto
 
function love.load()
   love.graphics.setNewFont(12)
   texto = "Nada ainda"
end
 
function love.update(dt)
 
end
 
function love.draw()
   love.graphics.print( texto, 330, 300 )
end

Capturando eventos do teclado

A maneira mais fácil de saber se o usuário está pressionando uma tecla é chamado o método love.keyboard.isDown, que possui a seguinte sintaxe:

love.keyboard.isDown( tecla )

O parâmetro "tecla" é uma string que representa a tecla desejamos saber se está sendo pressionada. Por exemplo:

if love.keyboard.isDown( " " ) then
   texto = "A tecla ESPAÇO foi pressionada!"
end

Você pode encontrar a relação completa de teclas aqui. O melhor local para realizar essa verificação é dentro do callback love.update, dessa forma, somos capazes de obter a entrada do usuário e atualizar nossas variáveis antes de tirar as nossas coisas da tela. Então, o nosso callback love.update modificado deve ficar assim:

function love.update(dt)
   if love.keyboard.isDown( " " ) then
      texto = "A tecla ESPAÇO foi pressionada!"
   end
end

Ainda que isso funcione perfeitamente, talvez nós apenas desejássemos saber quais teclas estão sendo pressionadas no momento e especificar diferentes comportamentos quando elas estão pressionadas ou forem soltas. Uma maneira elegante de fazer isso é usando os retornos de teclado love.keypressed e love.keyreleased. Eles trabalham de forma semelhante aos já conhecidos love.update e love.draw, executando o nosso código toda vez que o evento é acionado. Por exemplo:

function love.keypressed( tecla )
   if tecla == "return" then
      texto = "A tecla ENTER está sendo pressionada!"
   end
end
 
function love.keyreleased( tecla )
   if tecla == "return" then
      texto = "A tecla ENTER foi solta!"
   end
end

Como você pode ver, estes dois callbacks permitirão que você verifique se uma (ou mais) tecla está ou não sendo pressionada no momento. Até este ponto, o nosso código-fonte deve estar mais ou menos assim:

local texto
 
function love.load()
  love.graphics.setNewFont(12)
  texto = "Nada ainda"
end
 
function love.update(dt)
  if love.keyboard.isDown( " " ) then
    texto = "A tecla ESPAÇO foi pressionada!"
  end
end
 
function love.keypressed( tecla )
  if tecla == "return" then
    texto = "A tecla ENTER está sendo pressionada!"
  end
end
 
function love.keyreleased( tecla )
  if tecla == "return" then
    texto = "A tecla ENTER foi solta!"
  end
end
 
function love.draw()
  love.graphics.print( texto, 330, 300 )
end


Capturando eventos do mouse

Muito bem, agora que nós já sabemos como interagir com o jogador através do teclado, que tal tentarmos interagir através do mouse? As entradas do teclado funcionam de forma semelhante ao visto no teclado, nós temos o método love.mouse.isDown e os callbacks love.mousepressed e love.mousepressed. Agora, vamos adicionar algumas linhas em nosso love.update:

if love.mouse.isDown("r") then
   texto = "O botão direito do mouse foi pressionado!"
end

Como você pode ver, este método é bastante similar ao método love.keyboard.isDown, o que inclui uma relação de botões própria, a qual pode ser vista aqui. Além de verificar se os botões do mouse estão sendo pressionados, também é possível descobrir se a sua roda está sendo girada (e para qual direção). Ainda existem outros dois métodos que nos apresentam a posição da tela onde o mouse está posicionado: love.mouse.getX e love.mouse.getY. Cada um irá retornar a coordenada atual do ponteiro do mouse. Vejamos o que acontece ao adicionar estas duas linhas de código ao nosso callback love.update:

mouse_x = love.mouse.getX()
mouse_y = love.mouse.getY()

E esta linha ao callback love.draw:

love.graphics.print( "Mouse X: ".. mouse_x .. " Mouse Y: " .. mouse_y, 10, 20 )

Os love.mousepressed e love.mousereleased trabalham de forma muito semelhante aos os seus homólogos de teclado:

function love.mousepressed(x, y, botao)
  if botao == 'l' then
    texto = "O botão esquerdo do mouse está sendo pressionado!"
  end
end
 
function love.mousereleased(x, y, botao)
  if botao == 'l' then
    texto = "O botão esquerdo do mouse foi solto!"
  end
end

Um recurso interessante deste callback é que com ele você pode não apenas saber que um botão do mouse foi pressionado, mas também a posição onde o cursor do mouse estava quando isso ocorreu. Isto pode ser muito útil se você precisa montar alguns elementos básicos de interface com o usuário, como botões ou outros objetos com os quais seja possível interagir através do mouse. Exemplo:

function love.mousepressed(x, y, botao)
  if botao == 'l' then
    texto = "O botão esquerdo do mouse está sendo pressionado!\nCoordenadas: X "..x.."   Y "..y
  end
end

Por fim, existem outros dois métodos bastante interessantes relacionados ao mouse: love.mouse.setVisible e love.mouse.isVisible. O primeiro deles permite que você oculte/exiba o cursor do mouse, enquanto o segundo permite que você saiba se o cursor do mouse está visível ou não. Vamos adicionar mais algumas linhas de código ao nosso callback love.keypressed:

if tecla == 'h' then
--Use o trecho de código abaixo
  if love.mouse.isVisible() then
    --Se o mouse estiver vísivel, ele será ocultado
    love.mouse.setVisible(false)
  else
    --Se o mouse estiver oculto, ele será exibido
    love.mouse.setVisible(true)
  end
--Ou este:
  --love.mouse.setVisible(not love.mouse.isVisible())
end

Nestas poucas linhas vamos verificar se o cursor do mouse é visível ou não e, em seguida, mudar a sua visibilidade. Bem simples, não?


Other Languages