Tambem
há um outro jeito de parar o efeito.
Use o
método update() em vez do repaint().
Assim:
public
void repaint(Graphics g) {
update(g);
}
//Aqui
você coloca todas as funções gráficas que você precisa
public
void update(Graphics g) {
...
}
Se vc
usa esse método, em vez de a imagem piscar,
ela
funciona como se fosse um double buffering
mas
checa apenas as diferenças entre cada uma das imagens.
Falou.
Meu amigo teve um problema igualzinho ao seu, ele
resolveu isto após dias de pesquisa, conversa com ele que ele chegou a fundo
neste problema e resolveu.
----- Original Message -----
Sent: Monday, November 26, 2001 3:47
PM
Subject: Re: [java-list] Não consigo
parar o efeito piscante (Double_Buffer ing)
At 14:56 26/11/01 -0200, you wrote:
Pessoal: Sou leigo em
Java e estou precisando implementar uma pequena animação de texto
sobrepondo uma figura JPG sem aquele horrivel efeito
piscante. Eu tentei criar o velho
esquema de double_buffering, mas mesmo assim continua piscando, não
consigo entender. Toda vez que é chamado
o método repaint a imagem do fundo entra lentamente (é um JPG de 640x480)
no meu micro (Celeron 450). O que eu
estou fazendo de errado ? Agradeço a
atenção de todos. Fábio. Método
Paint
public void paint(Graphics g)
{ if(privez==1) // Na
primeira vez eu crio o contexto
gráfico
{
privez=0;
// Cria
buffer
buffer = createImage(640,
480); //
obtem e prepara contexto grafico
associado
gContexto =
buffer.getGraphics();
gContexto.setColor(Color.black);
gContexto.fillRect(0, 0, 640,
480);
gContexto.drawImage(logo,0,0,this); // Jpg
640x480
}
gContexto.setColor(Color.black);
gContexto.fillRect(0, 0, 640,
480);
gContexto.drawImage(logo,0,0,this);
String frase="";
frase=instru.substring(pos,pos+60);
gContexto.setFont(new
Font("Serif",Font.BOLD,40));
gContexto.setColor(Color.blue);
gContexto.drawString(frase,10,440);
g.drawImage(buffer, getInsets().left, getInsets().top,
this); try { // Espero
meio
segundo
Thread.sleep(500); }
catch (InterruptedException e)
{
e.printStackTrace();
} pos=pos+1; // Troco
a substring dando a
impressao // de um
texto que rola...
if(pos>fim-61)
{
pos=1;
}
repaint();
} }
vc nao deve
fazer essa chamada do repaint() dentro do paint... alem disso, a chamada
repaint() (pelo menos comigo) causa esse flickering mesmo... crie um thread
para a animação e faca desse jeito:
Metodo Paint:
public void paint(Graphics g)
{ if(privez==1) // Na
primeira vez eu crio o contexto
gráfico
{
privez=0;
// Cria
buffer
buffer = createImage(640,
480); //
obtem e prepara contexto grafico
associado
gContexto =
buffer.getGraphics();
gContexto.setColor(Color.black);
gContexto.fillRect(0, 0, 640,
480);
gContexto.drawImage(logo,0,0,this); // Jpg
640x480
}
gContexto.setColor(Color.black);
gContexto.fillRect(0, 0, 640,
480);
gContexto.drawImage(logo,0,0,this);
String frase="";
frase=instru.substring(pos,pos+60);
gContexto.setFont(new
Font("Serif",Font.BOLD,40));
gContexto.setColor(Color.blue);
gContexto.drawString(frase,10,440);
g.drawImage(buffer, getInsets().left, getInsets().top,
this); try { // Espero
meio
segundo
Thread.sleep(500); }
catch (InterruptedException e)
{
e.printStackTrace();
}
} // fim do paint()
* Crie
esta classe dentro de sua classe
private class updateThread extends
Thread { public void run(){ pos=pos+1; // Troco a substring dando
a impressao // de um texto que
rola...
if(pos>fim-61)
{
pos=1;
}
update(); // chamar repaint() causa
flickering
this.sleep(100);
} } // faltam os try_catch, mas... dah pra imaginar como
fica :)
Com isso, axo q resolve
":)
[]'s ------------------------------------------------- -----------
Herval Freire de A. Júnior ---------- ----------- mailto:[EMAIL PROTECTED]
------------ --------- http://www.herval.hpg.com.br
---------- ----------------- UIN: 2067270 ------------------
------------------------------------------------- --[The adepts are
everywhere... awake! v0.666a]--
-------------------------------------------------
http://member.isavvix.com/herval/vote.jsp?enquete=1003
|