Slide 1 - IME-USP

Propaganda
Programação Gráfica em Java
Animação
Aula 05
Na aula passada vimos:
•
•
•
•
•
•
Sistema de coordenadas
Contexto gráfico
Cores
Formas geométricas
Fontes
Métrica de fonte
2
O que você deve ter fixado:
• Obter o tratar o contexto gráfico
• Configurar cores, fontes e outras
características do contexto gráfico
• Desenhar as primitivas em um
componente
3
O que você deve ter fixado:
• Utilizar corretamente o sistema de
coordenadas dos componentes
• Diferenciar os métodos repaint(), update()
e paint(), além de saber quando usar cada
um deles
4
Na aula de hoje veremos:
• Thread
• Animação
• Técnica de desenho eficiente
(double-bufferring)
5
Thread
• Contexto de execução (ou processo leve)
– Uma thread usa recursos já alocados ao programa principal: por
isso é chamada de “processo leve”
• Fluxo individualizado de controle dentro
de um programa
– Várias threads podem existir ao mesmo tempo
• Uma thread não é um programa...
pertence a (ou faz parte de) um programa
6
Run()
• Uma thread sempre executa um método
chamado run() que deve ser sobrescrito
• Para sobrescrever run( ) podemos:
1. Subclassificar a classe Thread
2. Implementar a interface Runnable
Run() é logicamente parte da thread e
fisicamente parte do objeto runnable
Animator.java
7
Run()
• A vantagem de implementar Runnable é
que a thread tem acesso a todas variáveis
de instância da classe que a implementa
• A desvantagem é que o projeto foge às
boas regras da orientação a objetos
– Divisão de responsabilidades
8
Multithread
• Para dar uma idéia: Browsers
– permitem rolar a página enquanto realizam uma animação e
executam um download
• Alguns seres humanos alimentam-se,
respiram, andam, assoviam e pensam.
Tudo ao mesmo tempo!
• Qualquer programa que realize duas ou
mais tarefas ao mesmo tempo
9
Animação
• Desenho atualizado a intervalos regulares
• Deve ser feito em uma thread dedicada
• O loop de animação nunca deve ser feito
dentro dos métodos paint() ou update()...
– Isso ocuparia a thread principal que está encarregada de
desenhar o componente e tratar seus eventos
10
Passos
• 1. Modificar o estado do desenho
• 2. Chamar o método repaint()
• 3. Aguardar um momento (delay em ms) e
voltar ao passo 1
– Discutir o problema do escalonador Java
11
Comportamento agradável
• Permitir ao usuário parar (e reiniciar) a
animação
• Suspender a animação quando ela não
estiver visível
AnimatedFontWindow.java
12
flicker
• Cintilação na tela durante a atualização
• Causado pela implementação padrão do
método update()
• Melhora sobrescrevendo update() não
permitindo apagar toda a tela atual
NonDoubleBuferredDrag.java
UpdateDemoII.java
13
double - buffering
• Elimina virtualmente todo flicker
• Desenho fora da tela em imagem auxiliar
• Gasta o mesmo tempo para desenhar
DoubleBuferredDrag.java
14
double - buffering
• Troca a tela de exibição quando a imagem
estiver pronta
• Componentes do swing oferecem buffer
duplo de graça
• Pode-se ainda utilizar o redesenho
limitado (clipping) para melhorar a
performance
15
Animação de gráficos
• Pode ser:
• stand-alone
– Ocorre independentemente da ação do usuário
• on-demand
– Provocada pela interação do usuário
16
stand-alone
• Criar a thread de animação
• Definir o(s) métodos de pintura
chamado(s) pelo métod run()
• Fazer a atualização a intervalos regulares
ScrollingMessage.java
17
on-demand
• Não requer thread dedicada
• Mapear um ou mais eventos que possam
criar a necessidade de redesenho
• Fazer a atualização quando esses
eventos forem disparados
ShapeDrawWithMenu.java
18
O que você precisa saber...
• Formas de se implementar um fluxo
paralelo de execução
• Passos básicos de uma animação
• Animação como monitoramento de
estado, automática ou por solicitação
19
O que você precisa saber...
• Diferença entre buffer simples e duplo
• Uso do método update em animações
BouncingLines.java
20
Na próxima aula veremos:
• Swing:
• Por quê Swing
• Estratégia MVC (model-view-controller)
• Componentes AWT - semelhantes
• Contêineres
• Novos componentes do Swing
21
Download