Skip to content

Instantly share code, notes, and snippets.

@edmorais
Last active May 17, 2016 15:21
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save edmorais/eb13aeb0b18a85beca1b93a98e55bcb5 to your computer and use it in GitHub Desktop.
Save edmorais/eb13aeb0b18a85beca1b93a98e55bcb5 to your computer and use it in GitHub Desktop.
/*_ ___ ___ ___ __ _ __
| | / __|_ _|_ ) \/ |/ /
| |__\__ \| | / / () | / _ \
|____|___/___/___\__/|_\___/
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