Cursos y Másters | ||
| Inicio Profesores Aulas Testimonios Cursos Masters Tecnologías Cursos Gratuitos Solicitar Información Ofertas de Empleo |
| Página Anterior - Limpiando la basura | Página Actual - 09 - Controlando el caos | Página Siguiente - Más lento que el ojo |
| Índice de cursos Java gratuitos |
Controlando el caosAunque no lo parece, el sistema anterior de limpiar la basura tiene un problema del que nos percataremos en seguida. Para ello, primero vamos a hacer que el monstruo se mueva de forma más o menos controlada. En este caso haremos que se mueva de forma horizontal, y que "rebote" contra los límites de la ventana. Habitualmente este tipo de movimientos se implementan definiendo una variable vX que servirá como "velocidad" e indicará la cantidad que hay que sumar en cada "turno" (cada iteración del bucle del juego) a la variable posX que controla la posición del bicho Si la variable que representa la velocidad es positiva, (vX > 0), entonces la posición X irá aumentando y por lo tanto el bicho se moverá a la derecha. Si la variable vX es negativa, la posición X irá disminuyendo y el bicho se moverá a la izquierda. La forma de controlar los rebotes es comprobando la posición del bicho después de cada movimiento. Si se sale por la izquierda (posX < 0 ) o por la derecha (posX > WIDTH), entonces hay que cambiar la dirección del movimiento. Pero tal como lo tenemos planteado, cambiar la dirección del movimiento es simplemente cambiar el signo de la velocidad. Si antes de rebotar vX valía 5, después de rebotar pasará a valer -5 y viceversa Con todo esto, el paso 9 queda como sigue:
1 package version09; 2 /** 3 * Curso B?sico de desarrollo de Juegos en Java - Invaders 4 * 5 * (c) 2004 Planetalia S.L. - Todos los derechos reservados. Prohibida su reproducci?n 6 * 7 * http://www.planetalia.com 8 * 9 */ 10 11 12 import java.awt.Canvas; 13 import java.awt.Dimension; 14 import java.awt.Graphics; 15 import java.awt.event.WindowAdapter; 16 import java.awt.event.WindowEvent; 17 import java.awt.image.BufferedImage; 18 import java.net.URL; 19 import java.util.HashMap; 20 21 import javax.imageio.ImageIO; 22 import javax.swing.JFrame; 23 import javax.swing.JPanel; 24 25 public class Invaders extends Canvas { 26 public static final int WIDTH = 640; 27 public static final int HEIGHT = 480; 28 public static final int SPEED = 10; 29 30 public HashMap sprites; 32 public BufferedImage buffer; 33 34 public Invaders() { 35 sprites = new HashMap(); 36 posX = WIDTH/2; 38 vX = 2; 39 buffer = new BufferedImage(WIDTH,HEIGHT, BufferedImage.TYPE_INT_RGB); 40 41 JFrame ventana = new JFrame("Invaders"); 42 JPanel panel = (JPanel)ventana.getContentPane(); 43 setBounds(0,0,WIDTH,HEIGHT); 44 panel.setPreferredSize(new Dimension(WIDTH,HEIGHT)); 45 panel.setLayout(null); 46 panel.add(this); 47 ventana.setBounds(0,0,WIDTH,HEIGHT); 48 ventana.setVisible(true); 49 ventana.addWindowListener( new WindowAdapter() { 50 public void windowClosing(WindowEvent e) { 51 System.exit(0); 52 } 53 }); 54 ventana.setIgnoreRepaint(true); 55 ventana.setResizable(false); 56 } 57 58 public BufferedImage loadImage(String nombre) { 59 URL url=null; 60 try { 61 url = getClass().getClassLoader().getResource(nombre); 62 return ImageIO.read(url); 63 } catch (Exception e) { 64 System.out.println("No se pudo cargar la imagen " + nombre +" de "+url); 65 System.out.println("El error fue : "+e.getClass().getName()+" "+e.getMessage()); 66 System.exit(0); 67 return null; 68 } 69 } 70 71 public BufferedImage getSprite(String nombre) { 72 BufferedImage img = (BufferedImage)sprites.get(nombre); 73 if (img == null) { 74 img = loadImage("res/"+nombre); 75 sprites.put(nombre,img); 76 } 77 return img; 78 } 79 80 public void paintWorld() { 81 Graphics g = buffer.getGraphics(); 82 g.setColor(getBackground()); 83 g.fillRect(0,0,getWidth(),getHeight()); |
||||||||
¿Quieres ser notificado cuando salan nuevos tutoriales y cursos?. Pulsa aquí
| Invaders.java |
| Página Anterior - Limpiando la basura | Página Actual - 09 - Controlando el caos | Página Siguiente - Más lento que el ojo |
| Índice de cursos Java gratuitos |
(c) 2004 Planetalia S.L. Todos los derechos reservados. Prohibida su reproducción