Os eventos são ocorrências específicas disparadas pela intervenção externa do usuário ou mesmo do próprio sistema. No Processing estes eventos externos são reconhecidos e gerenciados pelas seguintes função especiais (handlers):

 

mouseButton()      - identifica qual botão foi pressionado (LEFT,CENTER,RIGHT)
mouseClicked()     – identifica quando  o botão foi pressionado e liberado
mouseDragged()  - identifica se  o mouse se movimenta enquanto botão estiver  pressionado
mouseMoved()      - ocorre quando o mouse é movimentado
mousePressed()    - ocorre quando o botão  é pressionado uma vez 
mouseReleased() – ocorre quando o botão é liberado
cursor()                    - habilita o cursor do mouse
noCursor()              - desabilita cursor do mouse

 

Aproveitando um código do tópico anterior utilizaremos o mouse para construir uma ferramenta de desenho:

 

void setup() {
size (500,500);
background(0);
smooth();
noStroke();
noCursor();
}

void draw() {

}

void mouseDragged() {
   float diam=random(2,5);
   ellipse(mouseX,mouseY,diam,diam);
}

Nesta modificação, o desenho  dos círculos só ocorre enquanto algum botão do mouse estiver pressionado, pois as instruções  estão dentro de mouseDragged(). Neste caso, a função draw()  fica sem utilidade – veja que  as ações estão associadas ao evento de mouse. Pressione o mouse e arraste para fazer o seu desenho:

 

 

Controlando o fluxo Até agora vimos que as animações ocorrem automaticamente graças ao  fluxo  de processamento  continuo  gerado pela função draw(). Existem duas funções que podem desativar e reativar esse fluxo: loop() noLoop() Utilizaremos estas duas funções associadas aos eventos de mouse para interromper e reiniciar uma animação simples:

void setup() {
  size (500,500);
  background(0);
  smooth();
  noStroke();
  fill (150,30);
}

void draw() {
    rect (random(width),random(height),random(10,50),random(10,100));
}

void mousePressed() {
  noLoop();
}

void mouseReleased() {
  loop();
}

Este sketch  desenha uma série de retângulos transparentes com posições e dimensões randômicas. A função mousePressed() captura o evento de botão  e ativa a função noLoop() que interrompe o fluxo. O fluxo só pode ser reativado com a função loop() que está incluida na função mouseReleased(). Logo, se pressionamos algum botão do mouse a animação é interrompida e só é retomada se soltamos o botão. No sketch, experimente clicar, mantendo o mouse  pressionado por algum tempo:

 

 

Utilizando o teclado

As teclas também podem ser utilizados como dispositivo  de interação. Os eventos associados são:

 

keyPressed()     – identifica se alguma tecla foi pressionada
keyReleased()   – identifica se alguma tecla foi liberada

 

Continuaremos com o código anterior, porém utilizaremos o  evento de teclado para apagar toda a tela:

 

void setup() {
  size (500,500);
  background(0);
  smooth();
  noStroke();
  fill (150,30);
}

void draw() {
    rect (random(width),random(height),random(10,50),random(10,100));
}

void mousePressed() {
  noLoop();
}

void mouseReleased() {
  loop();
}

void keyPressed() {
  background(0);
}

 

No final do código acrescentamos a função keyPressed() responsãvel pela captura de eventos. Se alguma tecla for pressionado a instrução  background(0) é executada , apagando a área de desenho. Neste sketch, aguarde o início do desenho e pressione qualquer tecla:

 

 

As teclas pressionados podem ser identificadas pelo código. Veremos essa possibilidade após a introdução sobre lógica condicional.

Tagged with: