|
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
|