Java - Problema con drawString

 
Vista:

Problema con drawString

Publicado por Isaac (21 intervenciones) el 29/08/2007 10:22:40
Hola, tengo un applet q mueve una serie de imagenes dentro de un rectangulo, y debajo de este quiero poner unos cuantas frases con drawstring, estas frases cambian con cada momento, osea son del tipo g.drawString("Perico de los palotes " + x, 250, 260); donde x puede ser un nombre o un entero.

Si lo pongo todo en el paint y no sobrescribo el metodo update me va bien, pero toda el applet sufre el parpadeo, para evitar el parpadeo sobrescribi el metodo update, osea, desde paint llamo a update y alli mando dibujar las imagenes y los strings, el problema es q la parte variable de los strings se sobrescribe encima y no se entiende, alguien sabe como puedo hacer q se vea bien el string y no haya parpadeo¿?

salu2.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil

RE:Problema con drawString

Publicado por chuidiang (950 intervenciones) el 29/08/2007 10:49:30
Hola:

El mecanismo es al revés. Desde update debes llamar a paint() y allí dibujar.
Para provocar el repintado, llama a repaint().

Se bueno.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Problema con drawString

Publicado por Isaac (21 intervenciones) el 29/08/2007 13:34:52
Pues hice lo q dijiste, desde update llamo a paint y al final del paint llamo a repaint(), con esto las imagenes en vez de irme a fps=2 q es lo puse, me van a una velocidad de escandalo, dando como resultado q una animacion q deberia durar 7 minutos no dura ni 10 segundos, ademas los strings tampoco se entienden ya q se dibujan encima y no se limpian.

Tb probe a poner la llamada a repaint() en el update despues de llamar a paint pero me pasa lo mismo.

Donde tengo q poner la llamada a repaint() para q no se me acelere la animacion y se limpien los strings¿?

salu2 y gracias.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

RE:Problema con drawString

Publicado por chuidiang (950 intervenciones) el 29/08/2007 17:02:28
Hola:

repaint() provoca el repintado, por lo que si justo después de paint() llamas a repaint(), este llamará a paint( ) y todo corre.

Una vez que tengas update() y paint() -sin la llamada a repaint()-, en algún sitio tendrías que tener lanzado un hilo con un bucle que haga esto

while (animacion)
{
espera cierto tiempo
repaint()
}

Un buen sitio sería el método init() o start() del applet. Aquí tienes algo sobre animación en java http://www.chuidiang.com/chuwiki/index.php?title=Animaci%C3%B3n_en_java . En el método main() puedes ver cómo lanzar el bucle con la espera.

Se bueno.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Problema con drawString

Publicado por Ishac (21 intervenciones) el 30/08/2007 21:31:50
Vale perdona pero no me habia fijado bien en mi codigo de animacion ya q lo cogi de una plantila de un tutorial, y resulta q ya hay una llamada a repaint() en el metodo run():

Este es el codigo:

public synchronized void start() {
if (frozen) {
//Do nothing. The user has requested that we
//stop changing the image.
} else {
//Start animating!
if (animatorThread == null) {
animatorThread = new Thread(this);
}
animatorThread.start();
}
}

public void stop() {
//Stop the animating thread.
animatorThread = null;
}

public boolean mouseDown(Event e, int x, int y) {
if (frozen) {
frozen = false;
start();
} else {
frozen = true;
stop();
}
return true;
}

public void run() {

Thread.currentThread().setPriority(Thread.MIN_PRIORITY);

long startTime = System.currentTimeMillis();

while (Thread.currentThread() == animatorThread) {

frameNumber++;

repaint(); <------------------------------------------------

try {
startTime += delay;
Thread.sleep(Math.max(0,startTime-System.currentTimeMillis()));
} catch (InterruptedException e) {
break;
}
}
}

Y asi todo no funciona, q tengo q hacer otra llamada a repaint() ¿?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Problema con drawString

Publicado por Ishac (21 intervenciones) el 31/08/2007 13:13:45
En cambio cuando maximizo la ventana si se limpia...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar