arteprog arte e programação

Input - 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. Veh=jamos aqui as maneiras de se obter informações sobre o movimento e cliques do mouse, assim como saber sobre as teclas sendo pressionadas no teclado.

  1. Variáveis de sistema

As variáveis de sistema como mouseX, mouseY, keyPressede mousePressed contém a todo instante informações sobre o estado do teclado e mouse. Podem ser consultadas em qualquer lugar do programa e são vistas frequentemente em condicionais dentro do bloco de draw().

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
char key caractere da última tecla alfa-numérica pressionada, ou a constante CODED
int keyCode código da última tecla não alfa-numérica, como SHIFT, UP e etc.
boolean keyPressed indica se alguma tecla está pressionada com (true)

Exemplo

void setup(){
  size(200, 200);
}

void draw(){
  if (keyPressed && 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(1);                      // usa linha fina grossa
    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)
}
  1. Funções para tratar eventos

Definidas pela pessoa criando o programa, com os nomes especiais “encomendados”, como keyPressed(), keyReleased(), mousePressed()ou mouseReleased(), estas funções precisam ser definidas fora do bloco de draw() (note que o draw() precisa existir, mesmo que vazio, para garantir a execução de um laço principal do Processing) e serão executadas apenas quando seus respectivos eventos de teclado e mouse acontecerem.

nome descrição
mouseReleased() função executada quando o botão do mouse é solto depois de pressionado
mouseWheel() função executada quando a rodinha do mouse é girada
mouseClicked() funcão executada quando o mouse é clicado (já solto o botão)
mouseDragged() função executada quando o mouse é movido pressionado
mouseMoved() função executada quando o mouse é movido
mousePressed() função executada quando o botão do mouse é pressionado
keyPressed() função executada quando uma tecla é pressionada
keyReleased() função executada quando uma tecla é solta
keyTyped() função executada quando uma tecla alfa-numérica é digitada

Exemplo

void setup(){
  size(200, 200);
}

void draw(){ // é necessário um draw(), mesmo que vazio, para que exista um laço principal e funcionem os eventos
}

void mouseDragged() {
  line(pmouseX, pmouseY, mouseX, mouseY); // Desenha uma linha da posição anterior do mouse até a atual
}

void 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(200);                          // Apague a tela com um fundo cinza (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 " + frameCount);   // mostre no console o número do frame
  }  
}

Bibliografia

REAS, C.; FRY, B. Processing: a programming handbook for visual designers and artists. Cambridge, Mass: MIT Press, 2007.