Foros del Web » Programación para mayores de 30 ;) » Java »

[SOLUCIONADO] Paint(), No quiero borrar lo anteriormente dibujado

Estas en el tema de Paint(), No quiero borrar lo anteriormente dibujado en el foro de Java en Foros del Web. Estoy utilizando paint() en java para dibujar sprites en movimiento. Cuando hago el repaint() todo el codigo que hay en el paint me lo vuelve ...
  #1 (permalink)  
Antiguo 12/02/2012, 11:53
Avatar de loganbdn  
Fecha de Ingreso: enero-2009
Ubicación: Badalona
Mensajes: 114
Antigüedad: 15 años, 3 meses
Puntos: 1
Paint(), No quiero borrar lo anteriormente dibujado

Estoy utilizando paint() en java para dibujar sprites en movimiento.

Cuando hago el repaint() todo el codigo que hay en el paint me lo vuelve a dibujar borrando lo que tenia anteriormente que esto va muy bien para que los sprites se vayan moviendo y borrando el movimiento anterior.

El problema es que necesito que algunas imagenes no las borre queden tal cual se dibujaron antes del repaint.
  #2 (permalink)  
Antiguo 13/02/2012, 23:39
Avatar de chuidiang
Colaborador
 
Fecha de Ingreso: octubre-2004
Mensajes: 3.774
Antigüedad: 19 años, 6 meses
Puntos: 454
Respuesta: Paint(), No quiero borrar lo anteriormente dibujado

Hola:

El método update() se encarga del borrado y paint() se encarga de pintar todo desde cero.

Tus opciones son sobreescribir update() para que llame directamente a paint(), por lo que no se borraría el canvas. O bien hacer que paint() dibuje en cada llamada todo lo que tenga que dibujar, lo nuevo y lo viejo que no quieres que se borre. Esto último es lo habitual.

Se bueno.
__________________
Apuntes Java
Wiki de Programación
  #3 (permalink)  
Antiguo 14/02/2012, 09:52
Avatar de loganbdn  
Fecha de Ingreso: enero-2009
Ubicación: Badalona
Mensajes: 114
Antigüedad: 15 años, 3 meses
Puntos: 1
Respuesta: Paint(), No quiero borrar lo anteriormente dibujado

Cita:
Iniciado por chuidiang Ver Mensaje
Hola:

El método update() se encarga del borrado y paint() se encarga de pintar todo desde cero.

Tus opciones son sobreescribir update() para que llame directamente a paint(), por lo que no se borraría el canvas. O bien hacer que paint() dibuje en cada llamada todo lo que tenga que dibujar, lo nuevo y lo viejo que no quieres que se borre. Esto último es lo habitual.

Se bueno.
¿Como sobreescribo el update() entonces para que no me borre el canvas? Mirando alguna pagina por internet he leido que update() solo sirve para AWT. ¿Si estoy utilizando Graphics2D uso SWING?

El codigo simplificado que utilizo mas o menos es este, luego mediante una llamada a un hilo cada 10ms me actualiza la posicion x e y de la textura al acabar el hilo hacia un repaint(). Pero claro me borra la anterior que es lo que no quiero que haga. ¿Entonces con el update() sobreescrito debo quitar tambien el repaint() que tengo puesto en el hilo que se ejecuta cada 10 ms?


public class Lienzo extends Canvas
{
int x=0,y=0,ancho=480,alto=400;

public void pintarOff(Graphics2D g2)
{
g2.drawImage(spriteTextura.cogerImagen(),spriteTex tura.X(),spriteTextura.Y(),this);
}
}
public void paint(Graphics g)
{
Graphics2D g2 = (Graphics2D)g;
Dimension d = getSize();
Image mImagen = createImage(d.width, d.height);
Graphics offG = mImagen.getGraphics();
pintarOff(offG);
g2.drawImage(mImagen, 0, 0, null);
}
}

Última edición por loganbdn; 14/02/2012 a las 09:58
  #4 (permalink)  
Antiguo 14/02/2012, 13:05
Avatar de chuidiang
Colaborador
 
Fecha de Ingreso: octubre-2004
Mensajes: 3.774
Antigüedad: 19 años, 6 meses
Puntos: 454
Respuesta: Paint(), No quiero borrar lo anteriormente dibujado

Hola:

Canvas es AWT.

Sobreescribes update() igual que paint(). Basta con declararlo igual que en la clase padre (Canvas) y hacer que llame directamente a paint().

Se bueno.
__________________
Apuntes Java
Wiki de Programación
  #5 (permalink)  
Antiguo 14/02/2012, 17:23
Avatar de loganbdn  
Fecha de Ingreso: enero-2009
Ubicación: Badalona
Mensajes: 114
Antigüedad: 15 años, 3 meses
Puntos: 1
Respuesta: Paint(), No quiero borrar lo anteriormente dibujado

Cita:
Iniciado por chuidiang Ver Mensaje
Hola:

Canvas es AWT.

Sobreescribes update() igual que paint(). Basta con declararlo igual que en la clase padre (Canvas) y hacer que llame directamente a paint().

Se bueno.
Algo hago mal, me sigue borrando igual lo anterior. Pero el parpadeo que me hacia antes ha mejorado ya que se ha eliminado. He puesto el update() exactamente igual que el paint() con el mismo codigo interno. Dentro de paint() no pongo nada. y el repaint() lo hago en el hilo que llamo cada 10ms.

update(Graphics g)
{
Graphics2D g2 = (Graphics2D)g;
Dimension d = getSize();
Image mImagen = createImage(d.width, d.height);
Graphics offG = mImagen.getGraphics();
pintarOff(offG);
g2.drawImage(mImagen, 0, 0, null);
paint(g2);
}

paint(Graphics g)
{
}
  #6 (permalink)  
Antiguo 14/02/2012, 17:51
Avatar de loganbdn  
Fecha de Ingreso: enero-2009
Ubicación: Badalona
Mensajes: 114
Antigüedad: 15 años, 3 meses
Puntos: 1
Respuesta: Paint(), No quiero borrar lo anteriormente dibujado

Cita:
Iniciado por chuidiang Ver Mensaje
Hola:

Canvas es AWT.

Sobreescribes update() igual que paint(). Basta con declararlo igual que en la clase padre (Canvas) y hacer que llame directamente a paint().

Se bueno.
Al final funciona he tenido un lapsus, anteriormente me lo borraba porque tenia puesto el doblebuffer para el parpadeo en el update()
He dejado el codigo asi..

update(Graphics g)
{
paint(g);
}

paint(Graphics g)
{
.
.....codigo de pintado.
.
}

Etiquetas: jar, paint, quiero
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 22:52.