Ver Mensaje Individual
  #3 (permalink)  
Antiguo 04/06/2012, 17:40
LuisChavezB
 
Fecha de Ingreso: diciembre-2011
Mensajes: 152
Antigüedad: 12 años, 4 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.