Utilizando setup(), draw() e variáveis globais

Voltar

Até o momento temos visto sequencia de código lineares, em que o programa é executado do inicio ao fim simplesmente seguindo a ordem de instruções como escrita. No caso de estruturas de seleção foi possível observar como o uso de blocos permite ignorar certas partes do código através de perguntas (operações booleanas), e assim saltamos um bloco que não se enquadra na seleção previamente feita.

O processing permite que se faça programas dessa forma linear sem problemas, no entanto, para desenvolver aplicativos mais elaborados, com interações de usuários e desenho de gráficos animados, será necessário explorar outras estruturas. Assim chegamos a uma modalidade de desenvolvimento com processing conhecida como setup/draw. Nesse formato qualquer programa começa com dois blocos que representam a configuração do aplicativo e o desenho continuo até o encerramento. Antes de continuar veja o exemplo: https://processing.org/examples/setupdraw.html.

Em um código mínimo usando setup/draw temos a seguinte estrutura:

void setup() {

}
void draw() {

}

Todo o código digitado dentro do bloco setup() será executado apenas uma vez no inicio do programa. Esse espaço deve ser utilizado para configurar elementos como tamanho da janela, variáveis globais e tudo que é importante antes do seu programa entrar em operação.

O bloco draw() é executado imediatamente após o setup() e será executado em ciclos até o encerramento do programa. Observe o fluxograma abaixo:

Screen Shot 2015-09-02 at 15.08.56

Ao fim do bloco draw() a sequencia de instruções retorna para o inicio do mesmo e executa novamente. Qualquer variável declarada dentro desse bloco é reiniciada durante esse processo.

Caso precise de dados que não estejam presos ao escopos desses blocos será necessário declara-los como globais. Nesse caso o termo global significa apenas que eles são declarados da forma usual, apenas fora de qualquer bloco. Vamos observar o exemplo abaixo:

int i; // variável fora de qualquer bloco, global

void setup() {
   i = 0;
}

void draw() {
   i = i + 1;
   print(i);
}

Observe o que acontece no console do processing. As variáveis globais são ferramentas para ajudar a reter informação durante a passagem por blocos e transcendem as questões de escopo. Existe apenas alguns cuidados que devem ser observados quando dentro de algum bloco exista algum variável local com mesmo nome. Nesse caso será dado a preferencia a variável de escopo mais próximo (local):

int i = 10; // Global

void setup() {
   int i = 50; // Local
   // será 10 ou 50? local ou global?
   println(i);
}

void draw() {
   println(i); // Acesso global
}

Observer o próximo exemplo. Nesse caso temos uma janela de 200 por 400 e um ciclo de desenho que traça uma linha entre o ponto 0,i ao 200,i. A cada nova passada de desenho o valor de i (iniciado em 0) será acrescentado em 10 (i += 10).

int i = 0; // Global

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

void draw() {
   line(0,i,200,i); // Desenha uma linha horizontal do ponto 0,i ao 200,i
   i += 10; // Acrescenta 10 ao valor de i.
}

Ao executar o código acima será obtido o seguinte resultado:

Screen Shot 2015-09-09 at 13.22.06