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

paint(Graphics2D g) orden pintado

Estas en el tema de paint(Graphics2D g) orden pintado en el foro de Java en Foros del Web. Hola a todos. Estoy trabajando en un pequeño proyecto de un juego y de momento tengo el pintado del mapa y de 1 soldado en ...
  #1 (permalink)  
Antiguo 20/02/2012, 12:51
 
Fecha de Ingreso: octubre-2008
Mensajes: 118
Antigüedad: 15 años, 6 meses
Puntos: 2
paint(Graphics2D g) orden pintado

Hola a todos.

Estoy trabajando en un pequeño proyecto de un juego y de momento tengo el pintado del mapa y de 1 soldado en pantalla. El problema que tengo es que no importa el orden de pintado, cuando el soldado llega a ciertas coordenadas empieza a pintarse detrás del mapa y no entiendo porque.

http://imageshack.us/photo/my-images/836/33102410.png
http://img41.imageshack.us/img41/9716/51357100.png
http://img17.imageshack.us/img17/6564/25989732.png

Utilizo la tecnica del doble buffer, en el init del JFrame creo una imagen:

Código:
doubleBuffer = createImage(ManagedGame.width*32, ManagedGame.height*32);
sobre la cual obtengo el grafico2d
Código:
 graf = (Graphics2D) doubleBuffer.getGraphics();

en el metodo run (mi Jframe tmb implementa Runnable)

limpio el grafico
Código:
this.graf.setColor(Color.WHITE);
this.graf.fillRect(0, 0, doubleBuffer.getWidth(null), doubleBuffer.getHeight(null));
y llamo al paint de todos los objetos sobre este grafico
Código:
                        
ManagedGame.level.paint(graf);
despues llamo a repaint
Código:
super.repaint();
dentro del ManagedGame.level.paint(graf) recorro todas las celdas pintandolas en este orden:
primero el suelo y despues los soldados que tenga
Código:
public void paint(Graphics2D g) {
      ground.paint(g);
      for (int i = 0; i < maxEntities; i++)
      {
          if ( this.listEntities[i] == null ) continue;
          this.listEntities[i].paint(g);
      }
  }
el paint de ground y de la lista de entidades simplemente pintan una imagen en unas coordenadas:
Código:
public void paint(Graphics2D g) {
        g.drawImage(this.img, (int)this.position.x, (int)this.position.y, null);
    }
He cambiado el orden de pintado pero el resultado es el mismo (cosa que no entiendo).

Como puedo solucionar este problema? y a que se debe?


Un Saludo y muchas gracias.
Dani.
  #2 (permalink)  
Antiguo 20/02/2012, 14:49
Avatar de loganbdn  
Fecha de Ingreso: enero-2009
Ubicación: Badalona
Mensajes: 114
Antigüedad: 15 años, 3 meses
Puntos: 1
Respuesta: paint(Graphics2D g) orden pintado

Parece que el problema es el orden de pintado. Alomejor el mapa se pinta machacando al soldado en esa coordenada. Has probado sin el doblebuffer?
  #3 (permalink)  
Antiguo 20/02/2012, 15:01
 
Fecha de Ingreso: octubre-2008
Mensajes: 118
Antigüedad: 15 años, 6 meses
Puntos: 2
Respuesta: paint(Graphics2D g) orden pintado

Cita:
Iniciado por loganbdn Ver Mensaje
Parece que el problema es el orden de pintado. Alomejor el mapa se pinta machacando al soldado en esa coordenada. Has probado sin el doblebuffer?
El orden de pintado? he probado a pintar primero el mapa y despues el soldado y en orden inverso, tmb he probado a pintar el mapa, soldado y mapa y el resultado es siempre el mismo.
No me interesa desactivar el doblebuffer xk asi se pierde rendimiento...
  #4 (permalink)  
Antiguo 21/02/2012, 08:42
Avatar de loganbdn  
Fecha de Ingreso: enero-2009
Ubicación: Badalona
Mensajes: 114
Antigüedad: 15 años, 3 meses
Puntos: 1
Respuesta: paint(Graphics2D g) orden pintado

Cita:
Iniciado por nosek159 Ver Mensaje
El orden de pintado? he probado a pintar primero el mapa y despues el soldado y en orden inverso, tmb he probado a pintar el mapa, soldado y mapa y el resultado es siempre el mismo.
No me interesa desactivar el doblebuffer xk asi se pierde rendimiento...
Prueba ha hacerlo sin el doblebuffer para ver si te lo pinta bien asi. Si sigue fallando ya sabes que no es del doblebuffer.
  #5 (permalink)  
Antiguo 21/02/2012, 16:36
 
Fecha de Ingreso: octubre-2008
Mensajes: 118
Antigüedad: 15 años, 6 meses
Puntos: 2
Respuesta: paint(Graphics2D g) orden pintado

Me ocurre lo mismo,
movido la linea que pintaba el nivel al paint del JFrame (sin pasarle el graf) y el resultado es el mismo con la variante que me da un error de ejecucion (auque sigue funcionando)

java.lang.NullPointerException
at javax.swing.RepaintManager.paintDirtyRegions(Repai ntManager.java:781)
  #6 (permalink)  
Antiguo 22/02/2012, 14:44
 
Fecha de Ingreso: octubre-2008
Mensajes: 118
Antigüedad: 15 años, 6 meses
Puntos: 2
Respuesta: paint(Graphics2D g) orden pintado

Ya esta claro... el error lo tenia en que no cambia el heroe de celda cuando este se desplazaba y por eso el orden de pintado no era el correcto.

Muchas gracias y siento mucho las molestias...

Etiquetas: orden
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

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 01:31.