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

Problema con objetos graphics

Estas en el tema de Problema con objetos graphics en el foro de Java en Foros del Web. Bien espero explicar bien mi problema que es algo largo de explicar. Tengo una clase casilla que me crea un FillRect. Luego una clase tablero ...
  #1 (permalink)  
Antiguo 04/06/2012, 08:08
 
Fecha de Ingreso: diciembre-2011
Mensajes: 30
Antigüedad: 10 años, 7 meses
Puntos: 0
Problema con objetos graphics

Bien espero explicar bien mi problema que es algo largo de explicar.

Tengo una clase casilla que me crea un FillRect. Luego una clase tablero que me crea nXM objetos casilla (Es una cuadricula). 32x32 por ejemplo.

Pero durante la ejecución del programa tengo que poder cambiar la dimensión entonces mi problema surge cuando tengo que hacer nuevos objetos casilla. Estos no se pintan encima de los objetos ya creados. Lo único que se me ocurria es cambiar el valor de los objetos casilla creados. Pero no tiene sentido porque faltaría objetos por crear.

Aquí pongo una especie de ejemplo que hecho (no es el programa que estoy haciendo solo un ejemplo por si no me he explicado bien).


Código Javascript:
Ver original
  1. public class Provamos extends JComponent{
  2.    
  3.     Color pintamos;
  4.     int medida;
  5.  
  6.     Provamos(Color r, int medida){
  7.         pintamos=r;
  8.         this.medida=medida;
  9.         setBounds(0,0,20,20);
  10.  
  11.     }
  12.  
  13.  
  14.     @Override
  15.     public void paintComponent(Graphics g){
  16.  
  17.         Graphics2D g2d = ( Graphics2D ) g;  // CONVERTIMOS G A GRAPHICS 2D
  18.  
  19.             g2d.setColor(pintamos);
  20.             g2d.fillRect(0, 0, medida, medida);
  21.         }
  22.  
  23. }
  24.  
  25. class Principal{
  26.  
  27.     public static void main (String [] args){
  28.  
  29.         JFrame ventana=new JFrame();
  30.         ventana.setLayout(null);
  31.         ventana.setSize(400,400);
  32.  
  33.  
  34.         ventana.add(new Provamos(Color.BLACK,20));
  35.         ventana.add(new Provamos(Color.WHITE,20)); // ESTE NO SE DIBUJA
  36.  
  37.         ventana.setVisible(true);
  38.         ventana.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  39.  
  40.  
  41.     }
  42. }

Gracias adelantadas a los que me puedan ayudar.
  #2 (permalink)  
Antiguo 04/06/2012, 13:56
 
Fecha de Ingreso: diciembre-2011
Mensajes: 152
Antigüedad: 10 años, 7 meses
Puntos: 34
Respuesta: Problema con objetos graphics

Que tal si re-pintas todo?
  #3 (permalink)  
Antiguo 04/06/2012, 17:40
 
Fecha de Ingreso: diciembre-2011
Mensajes: 152
Antigüedad: 10 años, 7 meses
Puntos: 34
Respuesta: Problema con objetos graphics

Si estas creando un juego podrias utilizar la libreria que estoy creando que te serviria muy bien para lo que necesitas, te dejo un ejemplo de un programa que crea una cuadricula de 8x8 y mueve una pieza de ajedrez en el tablero:

Codigo Fuente: https://github.com/luischavez/LGE
Video: http://www.youtube.com/watch?v=Wu2EDvwjqsQ
Ejecutable del ejemplo: http://www.mediafire.com/?d2x0ln4amgnkyzb


Código Javascript:
Ver original
  1. package test;
  2.  
  3. import java.awt.Color;
  4. import javax.swing.JFrame;
  5. import mx.com.leviathan.game.engine.event.CollisionEvent;
  6. import mx.com.leviathan.game.engine.event.SpriteAdapter;
  7. import mx.com.leviathan.game.engine.event.TouchEvent;
  8. import mx.com.leviathan.game.engine.object.Sprite;
  9. import mx.com.leviathan.game.engine.surface.DrawableSurface;
  10. import mx.com.leviathan.game.engine.surface.Surface;
  11. import mx.com.leviathan.game.engine.worker.WorkerHandler;
  12. import mx.com.leviathan.game.engine.worker.event.TouchWorker;
  13. import mx.com.leviathan.game.engine.worker.sprite.CollisionWorker;
  14. import mx.com.leviathan.game.engine.worker.surface.SurfaceWorker;
  15. import mx.com.leviathan.game.engine.worker.surface.TimeRepaintWorker;
  16.  
  17. /**
  18.  *
  19.  * @author Leviathan
  20.  */
  21. public class TEST {
  22.  
  23.     public static final int ROWS = 8, COLUMNS = 8;
  24.  
  25.     /**
  26.      * @param args the command line arguments
  27.      */
  28.     public static void main(String[] args) {
  29.         JFrame ventana = new JFrame();
  30.         ventana.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  31.         ventana.setSize(ROWS * 20, COLUMNS * 20);
  32.         ventana.setResizable(false);
  33.  
  34.         DrawableSurface drawableSurface = new DrawableSurface();
  35.         drawableSurface.setBounds(0, 0, ROWS * 20, COLUMNS * 20);
  36.  
  37.         ventana.add(drawableSurface);
  38.  
  39.         Color color = Color.BLACK;
  40.         int id = 1;
  41.         for (int i = 0; i < ROWS; i++) {
  42.             color = color.equals(Color.BLACK) ? Color.WHITE : Color.BLACK;
  43.             for (int j = 0; j < COLUMNS; j++) {
  44.                 color = color.equals(Color.BLACK) ? Color.WHITE : Color.BLACK;
  45.                 Grid grid = new Grid(color, id++, i * 20, j * 20, 20, 20);
  46.                 drawableSurface.addSprite(grid);
  47.             }
  48.         }
  49.  
  50.         Peon peon = new Peon(0, 0, 0, 20, 20);
  51.         peon.getSpriteListeners().add(new SpriteAdapter() {
  52.  
  53.             private Sprite sprite = null;
  54.  
  55.             @Override
  56.             public void onTouch(Sprite source, TouchEvent event) {
  57.                 if (event.getType() == TouchEvent.PRESSED) {
  58.                     if (sprite != null || !source.isTouched()) {
  59.                         sprite = null;
  60.                     } else {
  61.                         sprite = source;
  62.                     }
  63.                 }
  64.             }
  65.  
  66.             @Override
  67.             public void onTouchSurface(Surface surface, TouchEvent event) {
  68.                 if (event.getType() == TouchEvent.MOVED) {
  69.                     if (sprite != null) {
  70.                         sprite.update(event.getX(), event.getY());
  71.                     }
  72.                 }
  73.             }
  74.  
  75.             @Override
  76.             public void onCollision(Sprite source, Sprite target, CollisionEvent event) {
  77.                 if (event.getType() == CollisionEvent.CONTAINS) {
  78.                     source.setTouched(false);
  79.                     source.update(target.getX(), target.getY());
  80.                 }
  81.             }
  82.         });
  83.         drawableSurface.addSprite(peon);
  84.  
  85.         WorkerHandler workerHandler = new WorkerHandler();
  86.         TouchWorker touchWorker = new TouchWorker(drawableSurface);
  87.         touchWorker.setAutomatic(true);
  88.         workerHandler.getWorkers().add(touchWorker);
  89.         workerHandler.getWorkers().add(new CollisionWorker(drawableSurface));
  90.         workerHandler.getWorkers().add(new SurfaceWorker(drawableSurface));
  91.         workerHandler.getWorkers().add(new TimeRepaintWorker(30));
  92.  
  93.         workerHandler.init();
  94.  
  95.         ventana.pack();
  96.         ventana.setLocationRelativeTo(null);
  97.         ventana.setVisible(true);
  98.     }
  99. }

Y este es el codigo para dibujar la pieza de ajedrez y las grillas:
Código Javascript:
Ver original
  1. package test;
  2.  
  3. import java.awt.Graphics;
  4. import java.awt.Graphics2D;
  5. import java.awt.Image;
  6. import mx.com.leviathan.game.engine.object.MovableSprite;
  7. import mx.com.leviathan.game.engine.util.ImageUtils;
  8.  
  9. /**
  10.  *
  11.  * @author Leviathan
  12.  */
  13. public class Peon extends MovableSprite {
  14.  
  15.     private Image image = ImageUtils.loadImage("peon_blanco", "png");
  16.  
  17.     public Peon(int id, int x, int y, int width, int height) {
  18.         super(id, x, y, width, height);
  19.     }
  20.  
  21.     @Override
  22.     public void draw(Graphics graphics) {
  23.         Graphics2D graphics2D = (Graphics2D) graphics;
  24.         graphics2D.drawImage(image, getX(), getY(), getWidth(), getHeight(), null);
  25.     }
  26. }

Código Javascript:
Ver original
  1. package test;
  2.  
  3. import java.awt.Color;
  4. import java.awt.Graphics;
  5. import java.awt.Graphics2D;
  6. import mx.com.leviathan.game.engine.object.MovableSprite;
  7.  
  8. /**
  9.  *
  10.  * @author Leviathan
  11.  */
  12. public class Grid extends MovableSprite {
  13.    
  14.     private Color color;
  15.    
  16.     public Grid(Color color, int id, int x, int y, int width, int height) {
  17.         super(id, x, y, width, height);
  18.         this.color = color;
  19.     }
  20.    
  21.     @Override
  22.     public void draw(Graphics graphics) {
  23.         Graphics2D graphics2D = (Graphics2D) graphics;
  24.         graphics2D.setColor(color);
  25.         graphics2D.fill3DRect(getX(), getY(), getWidth(), getHeight(), true);
  26.     }
  27. }

Puedes agregar mas funcionalidades facilmente, la libreria no es perfecta pero pienso seguir mejorandola.

Etiquetas: clase, objetos, programa, string, graficos
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 19:37.