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 18: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
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