Input com teclado e mouse - entradas de dados
No Processing, o teclado e o mouse são duas as principais formas de entrada de dados. Em outra ocasião trataremos da leitura de arquivos e outras fontes de dados. Vejamos aqui maneiras de se obter informações sobre o movimento e cliques do mouse, assim como saber sobre as teclas sendo pressionadas no teclado.
Variáveis de sistema
As variáveis de sistema como mouseX
, mouseY
e mousePressed
oferecem a todo instante informações sobre o estado do mouse. Podem ser consultadas em qualquer lugar do programa e são vistas frequentemente em condicionais dentro do bloco de draw()
.
De maneira análoga, keyPressed
, key
e keyCode
tratam do estado do teclado. A variável keyPressed
indica se há uma tecla pressionada naquele instante, key
indica qual foi a última tecla ‘comum’ pressionada, se for igual à constante CODED
então é possível consultar keyCode
para saber qual foi a última tecla ‘codificada’, a comparando, por exemplo, com as constantes SHIFT
, ALT
e CONTROL
, ou as constantes das setas do teclado (UP
, DOWN
, LEFT
, RIGHT
), entre algumas outras constantes listadas no final da página.
Exemplo
def setup():
size(400, 400)
background(100, 100, 200)
def draw():
if keyPressed and keyCode == SHIFT: # se a tecla SHIFT estiver pressonada
strokeWeight(5) # # usa linha mais grossa
stroke(255) # com traço branco
else: # senão, quando tecla SHIFT não estiver pressonada
strokeWeight(3) # usa linha m
stroke(0) # com traço preto
if mousePressed: # Se o mouse estiver pressionado
line(pmouseX, pmouseY, mouseX, mouseY) # Então desenha uma linha da posição anterior do mouse até a atual
# termina o bloco (repare que no faz nada se o mouse estiver solto)
Quadro das variáveis de sistema
tipo | nome | descrição |
---|---|---|
int | mouseButton | indica qual botão do mouse foi clicado LEFT , RIGHT ou CENTER |
boolean | mousePressed | estado do mouse (True indica pressionado) |
int | mouseX | informa a posição X do mouse na tela |
int | mouseY | informa a posição Y do mouse na tela |
int | pmouseX | informa a posição X anterior do mouse na tela |
int | pmouseY | informa a posição Y anterior do mouse na tela |
string | key | caractere da última tecla ‘comum’ pressionada, ou a constante CODED |
int | keyCode | código da última tecla ‘codificada’, como SHIFT , UP e etc. |
boolean | keyPressed | indica se alguma tecla está pressionada com (True ) |
Funções acionadas por eventos
Quando definimos funções com certos nomes especiais ‘encomendados’, como keyPressed()
, mousePressed()
, ou alguma outra listada no quadro mais abaixo, elas serão executadas pelo Processing quando certos eventos do mouse ou do teclado acontecerem.
No jargão do desenvolvimento de interfaces isso é chamado de tratamento de eventos. Repare que não chamamos essas funções no nosso código, o Processing chama por nós as funções nos ‘eventos’ apropriados, caso elas tenham sido definidas.
As funções precisam ser definidas fora do bloco de draw()
, e note que a definição de draw()
precisa existir, mesmo que vazio, para garantir a execução de um “laço principal” no Processing.
Exemplo com mouseDragged()
e keyPressed()
def setup():
size(400, 400)
background(100, 200, 100)
def draw():
# é necessário um draw(), mesmo que vazio, para que exista um laço principal e funcionem os eventos
pass
def mouseDragged():
strokeWeight(5)
line(pmouseX, pmouseY, mouseX, mouseY) # Desenha uma linha da posição anterior do mouse até a atual
def keyPressed(): # Esta função executa uma vez quando uma tecla é pressionada
if key == 'a': # Se a tecla do caractere 'a' foi a última pressionada
background(100, 200, 100) # Apague a tela com um fundo verde (só executa sob as condições acima)
if keyCode == DOWN: # Se a seta para baixo foi precionada
saveFrame("imagem-####.png") # salve a imagem da tela de pintura em um arquivo PNG
println("salvo o frame {}.".format(frameCount)) # mostre no console o número do frame
Quadro das funções acionadas por eventos
nome da função | descrição do evento |
---|---|
mouseReleased() | executada quando o botão do mouse é solto depois de pressionado |
mouseWheel(event) | executada quando a rodinha do mouse é girada (deslocamento obtido com event.getCount() ) |
mouseClicked() | executada quando o mouse é clicado (já solto o botão) |
mouseDragged() | executada quando o mouse é movido pressionado |
mouseMoved() | executada quando o mouse é movido |
mousePressed() | executada quando o botão do mouse é pressionado |
keyPressed() | executada quando uma tecla é pressionada |
keyReleased() | executada quando uma tecla é solta |
keyTyped() | executada quando uma tecla alfa-numérica é digitada |
Algumas constantes úteis
Contantes para usar com keyCode (e o correspondente valor numérico)
UP 38
DOWN 40
LEFT 37
RIGHT 39
ALT 18
CONTROL 17
SHIFT 16
Constantes para usar com key (e o string equivalente)
BACKSPACE '\b'
TAB '\t'
ENTER '\n'
RETURN '\r'
ESC '\x1b'
DELETE '\x7f'
Assuntos relacionados
- Escutando teclas simultâneas
- Um botão simples
- Arrastando círculos
- Como ler a rodinha do mouse (mouse wheel ou scroll wheel)
Este material é baseado no material do curso https://arteprog.space/programacao-criativa/
Texto e imagens / text and images: CC BY-NC-SA 4.0; Código / code: GNU GPL v3.0 exceto onde explicitamente indicado por questões de compatibilidade.