Difference between revisions of "Tutorial:Using Input (Português)"

(Created page with "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 ...")
 
 
(One intermediate revision by the same user not shown)
Line 19: Line 19:
  
 
==Capturando eventos do teclado==
 
==Capturando eventos do teclado==
 
+
A maneira mais fácil de saber se o usuário está pressionando uma tecla é chamado o método <code>[[love.keyboard.isDown (Português)|love.keyboard.isDown]]</code>, que possui a seguinte sintaxe:
A maneira mais fácil de saber se o usuário está pressionando uma tecla é chamado o método [[love.keyboard.isDown (Português)|love.keyboard.isDown]], que possui a seguinte sintaxe:
+
  
 
<source lang="lua">
 
<source lang="lua">
Line 34: Line 33:
 
</source>
 
</source>
  
Você pode encontrar a relação completa de teclas [[KeyConstant (Português)|aqui]]. O melhor local para realizar essa verificação é dentro do callback [[love.update (Português)|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:
+
Você pode encontrar a relação completa de teclas [[KeyConstant (Português)|aqui]]. O melhor local para realizar essa verificação é dentro do callback <code>[[love.update (Português)|love.update]]</code>, 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:
  
 
<source lang="lua">
 
<source lang="lua">
Line 44: Line 43:
 
</source>
 
</source>
  
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 (Português)|love.keypressed]] e
+
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 <code>[[love.keypressed (Português)|love.keypressed]]</code> e <code>[[love.keyreleased (Português)|love.keyreleased]]</code>. Eles trabalham de forma semelhante aos já conhecidos <code>[[love.update (Português)|love.update]]</code> e <code>[[love.draw (Português)|love.draw]]</code>, executando o nosso código toda vez que o evento é acionado. Por exemplo:
 +
 
 +
<source lang="lua">
 +
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
 +
 
 +
</source>
 +
 
 +
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:
 +
 
 +
<source lang="lua">
 +
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
 +
</source>
 +
 
 +
 
 +
==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  <code>[[love.mouse.isDown (Português)|love.mouse.isDown]]</code> e os callbacks <code>[[love.mousepressed (Português)|love.mousepressed]]</code> e <code>[[love.mousepressed (Português)|love.mousepressed]]</code>. Agora, vamos adicionar algumas linhas em nosso <code>[[love.update (Português)|love.update]]</code>:
 +
 
 +
<source lang="lua">
 +
if love.mouse.isDown("r") then
 +
  texto = "O botão direito do mouse foi pressionado!"
 +
end
 +
</source>
 +
 
 +
Como você pode ver, este método é bastante similar ao método <code>[[love.keyboard.isDown (Português)|love.keyboard.isDown]]</code>, o que inclui uma relação de botões própria, a qual pode ser vista [[MouseConstant (Português)|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: <code>[[love.mouse.getX (Português)|love.mouse.getX]]</code> e <code>[[love.mouse.getY (Português)|love.mouse.getY]]</code>. 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 <code>[[love.update (Português)|love.update]]</code>:
 +
 
 +
<source lang="lua">
 +
mouse_x = love.mouse.getX()
 +
mouse_y = love.mouse.getY()
 +
</source>
 +
 
 +
E esta linha ao callback <code>[[love.draw (Português)|love.draw]]</code>:
 +
 
 +
<source lang="lua">
 +
love.graphics.print( "Mouse X: ".. mouse_x .. " Mouse Y: " .. mouse_y, 10, 20 )
 +
</source>
 +
 
 +
Os <code>[[love.mousepressed (Português)|love.mousepressed]]</code> e <code>[[love.mousereleased (Português)|love.mousereleased]]</code> trabalham de forma muito semelhante aos os seus homólogos de teclado:
 +
 
 +
<source lang="lua">
 +
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
 +
</source>
 +
 
 +
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:
 +
 
 +
<source lang="lua">
 +
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
 +
</source>
 +
 
 +
Por fim, existem outros dois métodos bastante interessantes relacionados ao mouse: <code>[[love.mouse.setVisible (Português)|love.mouse.setVisible]]</code> e <code>[[love.mouse.isVisible (Português)|love.mouse.isVisible]]</code>. 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 <code>[[love.keypressed (Português)|love.keypressed]]</code>:
 +
 
 +
<source lang="lua">
 +
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
 +
</source>
 +
 
 +
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?
 +
 
 +
[[Category:Tutorials]]
 +
{{#set:LOVE Version=0.9.2}}
 +
{{#set:Description=Using Input}}
 +
 
 +
== Other Languages ==
 +
{{i18n|Tutorial:Using Input}}

Latest revision as of 20:15, 11 March 2015

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