Skip to content

Latest commit

 

History

History
147 lines (112 loc) · 4.92 KB

04_respondendo_eventos.md

File metadata and controls

147 lines (112 loc) · 4.92 KB

Respondendo a eventos

Capturar movimentos e cliques do mouse e teclas pressionadas é fundamental no desenvolvimento de jogos eletrônicos. É isso que aprenderemos nessa seção.

Programação orientada a eventos

Programação orientada a eventos é quando você escreve código para responder a eventos.

Para tal, você irá precisar de dois elementos:

  • Evento a ser capturado
  • Resposta ao evento

Turtle fornece mecanismo para registrar os eventos que serão escutados por meio dos métodos on:

  • onclick(fun, btn=1, add=None)
  • onscreenclick(fun, btn=1, add=None)
  • onrelease(fun, btn=1, add=None)
  • ondrag(fun, btn=1, add=None)
  • onkey(fun, key)
  • onkeypress(fun, key=None)
  • ontimer(fun, t=0)

Esses métodos definem os eventos a serem capturados. Perceba que todos eles possuem um parâmetro obrigatório fun. Este fun é de function. Ou seja, é uma função que será executada em resposta ao evento. Essa função pode ser definida por você, ou pode ser uma função já existente, desde que ela possua a quantidade de parâmetros esperada. Portanto, funções são também valores/ objetos e podem ser passadas como argumentos ao se chamar outras funções.

Vejamos um exemplo.

Imagine um cenário em que a tartaruga deve movimentar-se até o ponto em que a tela foi clicada.

Já vimos anteriormente que o método goto(x, y) recebe dois parâmetros, que indicam um ponto para onde a tartaruga deve ir.

Já o evento que queremos capturar é o clique na tela, o que é feito com a função onscreenclick(fun, btn=1, add=None).

Porém, essa função não é de uma tartaruga em específico, mas da tela. Então precisaremos importa-lá do módulo turtle antes de utiliza-lá. Aproveitaremos para ver outra sintaxe de importação com a instrução from. Veja como fica:

>>> from turtle import Turtle, onscreenclick, listen
>>> turtle = Turtle()
>>> onscreenclick(turtle.goto)

Perceba que você não deve colocar os parênteses no goto, tão pouco os parâmetros. Isso será feito internamente. Quando a tela for clicada, os parâmetros receberão a posição em que a tela foi clicada e a função será executada.

Vamos agora definir uma função própria. Essa função vai mandar a tarturuga ir para o ponto clicado e depois escrever na tela a sua nova posição (veja o novo método write).

>>> def goto_and_mark(x, y):
...    turtle.goto(x, y)
...    turtle.write(turtle.position())
>>> 
>>> goto_and_mark(191, 183)

A última linha acima serve apenas para testarmos se a função faz o que queremos. Execute algumas vezes com argumentos diferentes, se quiser. Assim, quando for feita a ligação com o evento, você terá certeza que a função está correta.

Agora, precisamos atualizar qual será a resposta ao evento de clique na tela.

>>> onscreenclick(goto_and_mark)

Novamente, lembre-se de não utilizar parênteses e argumentos. Essas funções que serão executadas em algum momento no futuro, são chamadas de funções de retorno.

Vamos agora responder às teclas pressionadas.

Imagine agora que você queira movimentar a tartaruga através das teclas de setas (cima/baixo, direta/esquerda). Para isso, deverá escrever 4 funções de retorno, que irão manipular as coordenadas x e y da tartaruga. Neste caso, essas funções não terão parâmetro algum.

>>> def up():
...     y_atual = turtle.ycor()
...     novo_y = y_atual + 5
...     turtle.sety(novo_y)
>>> 
>>> up() 

A última linha acima serve apenas para testarmos se a função faz o que queremos. Execute algumas vezes, se quiser.

Agora precisamos associar essa funcao à tecla de seta para cima.

>>> from turtle import onkey, listen
>>> onkey(up, 'Up')
>>> listen()

Além disso, após a definição da tecla que será escutada, a escuta de teclas deve ser iniciada com a função listen(xdummy=None, ydummy=None).

Da mesma forma, podemos criar uma função para movimentar a tartaruga para baixo.

>>> def down():
...     y_atual = turtle.ycor()
...     novo_y = y_atual - 5
...     turtle.sety(novo_y)
>>> 
>>> down() 

E depois associa-lá à tecla da seta.

>>> from turtle import onkey, listen
>>> onkey(down, 'Down')
>>> listen()

Desafio Sabendo que para movimentar a tartaruga na horizontal você deve manipular a coordenada x e que as teclas para direita e esquerda são Right e Left, respectivamente, faça a tartaruga movimentar-se nessa direção.

Desafio Após finalizar o desafio anterior, feito no modo interativo, refaça o exercício em arquivo Python. Lembre-se de reorganizar as instruções de import e demais que eventualmente possam ter sido repetidos. Também reflita sobre o shape da tartaruga e aplique um que melhor convier para essa situação.

Anterior | Próximo