Usando o Ciclo Universal da Animação em Applets Java

291 0

O método run() deve parecer familiar. Ele é uma versão em Java do Ciclo Universal da Animação (lembras-te deste artigo onde falamos sobre o que é animação?). O que este método faz é desenhar o frame corrente, atualizar o rectângulo para a nova posição e parara um tempo antes de reiniciar o ciclo. Vamos analisar o ciclo com mais detalhes.

A primeira linha do método run() invoca o método repaint() definido na classe base Applet. Lembre-se que a nossa classe AppletAnimado é uma subclasse de Applet, logo herda todos os seus métodos. O método repaint() é um dos métodos herdados, e a sua invocação tem dois efeitos:

  • 1. Ele limpa a tela.
  • 2. Ele desenha o frame atual da animação, invocando o método paint().

paint() é o método da classe Applet que desenha o frame Atual; repaint() redesenha o frame, invocando paint(), lógico não?

O segundo método invocado pelo método run() é o método atualiza(), que processa a nova posição do centro do rectângulo e armazena os valores em locx e locy, que são variáveis que indicam o canto superior esquerdo do rectângulo. O efeito deste método é mover o rectângulo para uma nova posição durante a animação.

A última linha do método run() provoca uma pausa de 100 milissegundos( 0.1 segundos), antes do ciclo terminar a iteração e voltar ao topo, para um framerate de 100 fps. Thread.sleep() referencia ao método estático da classe Thread, chamado sleep().

O método run() tem este nome por uma razão muito simples. Veja a declaração da classe AppletAnimado:

 

public class AppletAnimado extends Applet implements Runnable{

        ….

}

A classe AppletAnimado não só deriva da classe Applet, mas também implementa a interface Runnable . Runnable é uma interface, o que indica que ele possui uma série de métodos declarados mas não implementados(lembra-se quando falamos de implementação interfaces em Java ?), e estes métodos devem ser implementados na classe que implementa esta interface, AppletAnimado neste caso. O método run() é um destes métodos.

Analisando a execução da Applet

Os passos de execução da nossa Applet são um pouco complexos. Primeiro é invocado o método init(), para inicializar a applet. Depois é invocado o método start():

public void start()
{
          System.out.println(">> start <<");
          animacao = new Thread(this);
          if (animacao != null)
          {
                     animacao.start();
          }
}

 

O método start() faz duas coisa:

  • 1. Ele cria um novo processo(tarefa) chamado animacao.
  • 2. Ele faz com que este processo comece a execução do código pelo método run(), invocando o método animacao.start().
  1.  

O processo animacao opera independentemente, logo que o seu método start() é invocado, e termina a execução ao se invocar o método stop(). Enquanto o processo animacao está sendo executado, ele faz com que o rectângulo se mova!

Note o excesso de código na nossa classe AppletAnimado. Você deve estar se perguntando: será que todo este código é realmente necessário?

A resposta é sim. Na verdade o que acontece quando criamos uma Applet, é que nós usamos métodos e instruções de outras classes, daí a necessidade de sobrescrever os métodos herdados e implementar os métodos abstractos.

(Visited 121 times, 1 visits today)