Last active
May 17, 2016 15:21
-
-
Save edmorais/eb13aeb0b18a85beca1b93a98e55bcb5 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/*_ ___ ___ ___ __ _ __ | |
| | / __|_ _|_ ) \/ |/ / | |
| |__\__ \| | / / () | / _ \ | |
|____|___/___/___\__/|_\___/ | |
Aula de 9/05/2016: | |
Executa três animações controladas por três botões, podendo acumular. | |
Por Eduardo Morais / FBAUP - www.eduardomorais.pt/fbaup/ | |
*/ | |
// Variáveis da cada animação - | |
// Precisamos de variáveis globais mas precisamos de distingui-las: | |
// variaveis circulo: | |
int circulo_tamanho = 0; | |
// variaveis quadrado: | |
int quadrado_tamanho = 0; | |
// variaveis letras: | |
int letras_tamanho = 10; | |
// Variáveis que definem os botões: | |
int[] botao1 = {50, 530, 80, 40}; // array com x, y, largura, altura do botão | |
int[] botao2 = {150, 530, 80, 40}; | |
int[] botao3 = {250, 530, 80, 40}; | |
int[] botao4 = {470, 530, 80, 40}; | |
String botao1_txt = "Efeito 1"; // texto do botão | |
String botao2_txt = "Efeito 2"; | |
String botao3_txt = "Efeito 3"; | |
String botao4_txt = "Limpa"; | |
boolean botao1_ligado = false; // se o botão está ligado | |
boolean botao2_ligado = false; | |
boolean botao3_ligado = false; | |
/* | |
Função setup() | |
*/ | |
void setup() { | |
size(600,600); | |
background(0); | |
smooth(); | |
fill(255); | |
noFill(); | |
stroke(255); | |
} | |
/* | |
Função draw(): | |
Aqui apenas vai reencaminhar a execução para outras funções. | |
*/ | |
void draw() { | |
// utilizamos o método SCREEN para acumular as figuras desenhadas no ecrã | |
blendMode(SCREEN); | |
// se os botões estiverem ligados chamamos a animação | |
if (botao1_ligado) circulo(); | |
if (botao2_ligado) quadrado(); | |
if (botao3_ligado) letras(); | |
// agora queremos que os botões sejam opacos | |
blendMode(BLEND); | |
// chamamos a função que desenha botões, com os parâmetros: | |
// array: coordenadas, boolean: se está ligado, String: texto | |
desenhaBotao(botao1, botao1_ligado, botao1_txt); | |
desenhaBotao(botao2, botao2_ligado, botao2_txt); | |
desenhaBotao(botao3, botao3_ligado, botao3_txt); | |
desenhaBotao(botao4, false, botao4_txt); // este está sempre desligado | |
} | |
/* | |
Função desenhaBotao(): | |
Desenha botões, com os parâmetros: | |
array botao[]: coordenadas, boolean ligado : se está ligado, String texto: texto | |
*/ | |
void desenhaBotao(int[] botao, boolean ligado, String texto) { | |
// usa cores diferentes se o botão estiver ligado: | |
if (ligado) { | |
fill(#CC9933, 192); | |
} else { | |
fill(#666666, 192); | |
} | |
stroke(0); | |
rectMode(CORNER); | |
// desenha o botão nas coordenadas recebidas através do array | |
// [0]: x, [1]: y, [2]: largura, [3]: altura | |
rect(botao[0], botao[1], botao[2], botao[3]); | |
textSize(12); | |
textAlign(CENTER, CENTER); | |
fill(255); | |
// coloca texto no centro do botão (x + largura/2, y + altura/2): | |
text(texto, botao[0] + (botao[2]/2), botao[1] + (botao[3]/2)); | |
} | |
/* | |
Função mouseReleased(): | |
Executada no momento em que largamos um botão do rato: | |
*/ | |
void mouseReleased() { | |
// a função que testa o botao devolve um valor booleano | |
// que nos diz se está ou não ligado: | |
botao1_ligado = testaBotao(botao1, botao1_ligado); | |
botao2_ligado = testaBotao(botao2, botao2_ligado); | |
botao3_ligado = testaBotao(botao3, botao3_ligado); | |
if (testaBotao(botao4, false)) { | |
// no caso do botao 4, queremos usá-lo para limpar o ecrã | |
// assim damos um valor falso à função, que devolverá um verdadeiro | |
// se o botão tiver sido premido. | |
background(0); | |
} | |
} | |
/* | |
Função testaBotao(): | |
Caso o rato esteja por cima do botão quando a função é chamada (no momento do clique), | |
devolve o valor do parâmetro 'ligado' invertido. Os parâmetros são: | |
array botao[]: coordenadas, boolean ligado: se está ligado | |
*/ | |
boolean testaBotao(int[] botao, boolean ligado) { | |
// se as coordenadas do rato estão dentro dos limites do botao | |
// (> x e > y e < x+largura e < y+altura): | |
if (mouseX > botao[0] && mouseY > botao[1] && | |
mouseX <botao[0]+botao[2] && mouseY < botao[1]+botao[3]) { | |
// inverte o valor da variavel true/false: | |
ligado = !ligado; | |
} | |
// devolve o valor de 'ligado' actualizado | |
// (daí a função ser de tipo boolean e não 'void'/nulo): | |
return ligado; | |
} | |
/* | |
Animações (igual ao código #2016-14) | |
------------------------------------ | |
*/ | |
/* | |
Função circulo(): | |
Desenha um círculo centrado com dimensões crescentes. | |
*/ | |
void circulo() { | |
fill(#FF0000,20); | |
noStroke(); | |
ellipseMode(CENTER); | |
ellipse(width/2, height/2, circulo_tamanho, circulo_tamanho); | |
circulo_tamanho += 8; // | |
// ao atingir as dimensões da janela volta as dimensões a zero e limpa o ecrã: | |
if (circulo_tamanho > width) { | |
circulo_tamanho = 0; | |
background(0); | |
} | |
} | |
/* | |
Função quadrado(): | |
Desenha um quadrado centrado com dimensões crescentes. | |
*/ | |
void quadrado() { | |
fill(#006699,20); | |
noStroke(); | |
rectMode(CENTER); | |
rect(width/2, height/2, quadrado_tamanho, quadrado_tamanho); | |
quadrado_tamanho += 5; | |
// ao atingir as dimensões da janela volta as dimensões a zero e limpa o ecrã: | |
if (quadrado_tamanho > width) { | |
quadrado_tamanho = 0; | |
background(0); | |
} | |
} | |
/* | |
Função letras(): | |
Desenha um texto centrado com dimensões crescentes. | |
*/ | |
void letras() { | |
textSize(letras_tamanho); | |
textAlign(CENTER, CENTER); | |
fill(#FF6600,random(0,100)); // transparência aleatória | |
text("LSI", width/2, height/2-32); | |
letras_tamanho += 3; | |
// ao atingir certas dimensões as dimensões a 'zero' e limpa o ecrã: | |
if (letras_tamanho > 400) { | |
letras_tamanho = 10; | |
background(0); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment