El Blog de Murphy

27 Agosto 2008

juego en java 2D – 1er dia

Archivado en: Java 2D — Etiquetas:, , , — Julio Cesar Cachay Pérez @ 4:21 am

Comienzo este mi segundo blog despues de muuucho tiempo, bueno contandoles que voy a comenzar a hacer un juego en java 2D para escritorio, y decidi escribir todo mi proceso de aprendizaje en este blog para futuras referencias mias, x si se me pierde la carpeta donde estoy trabajando :P , y para todo el mundo que tenga ganas de hacer un juego en java.

Bueno el requisito fundamental para comenzar a entender este blog es saber (y entender) las bases de java y saber ingles, no, no es que yo vaya a escribir en ingles…jamás… lo que pasa es que los libros que voy a usar para aprender estan en linea y estan en ingles… bueno si no sabes ingles aprende, porque la mejor informacion en computacion estan en este idioma.

Pero antes de comenzar con los libros, resulta que hay una pagina que te enseña hacer el juego de invaders y esta en español, bueno io con el ingles técnico no me llevo tan bien es por eso que mejor comienzo aprendiendo lo basico en español y despues me muevo a lo mas dificil que está en los libros, la pag es:

http://www.planetalia.com/cursos/

Ahora no me voy a poner a describir lo que ya describieron en ese curso, lo unico que voy a hacer es dedicarme a resolver mis dudas, y ojala sean sus dudas, y explicar mis errores

Comencemos:

Bueno hoy llegue al capitulo 4 despues de casi 3hrs… si 3 HORAS, y es que primero me detuve a bajar el ultimo netbeans y no se puedo porque la velocidad de internet de mi depa es de 1mb segun telefonica del perú… osea… asi que tuve que conformarme con la version 6.0.1

Bueno los 3 primeros capitulos fueron muy faciles, es mas escribi un poco de ayuda en el codigo, que publicare mas adelante, la gracia vino en el capitulo 4 donde te sigue atiborrando de codigo pero como no t dice como funciona, a una pequeña duda que t quedo y t perdiste. bueno ahora si el codigo:

public class Invaders extends Canvas{ //extiende de la clase  Canvas
public static final int WIDTH = 800; // tamaño del panel
public static final int HEIGHT = 600;

public Invaders() {
JFrame ventana = new JFrame("Invaders");// crea una nueva ventana

JPanel panel = (JPanel)ventana.getContentPane();// creamos un objeto panel del tipo contentPane de ventana
setBounds(0,0,WIDTH,HEIGHT);//le damos el tamaño al componente
panel.setPreferredSize(new Dimension(WIDTH,HEIGHT));// le da el tamaño preferido al panel
panel.setLayout(null);// setea el administrador de diseño a null (no estoy muy seguro de esto mmm)
panel.add(this); <// agrega la funcion

ventana.setBounds(0,0,WIDTH,HEIGHT)// le da le tamaño... a qué? vaya ud a saber...
ventana.setVisible(true);//la hace visible
ventana.addWindowListener( new WindowAdapter() { // asi el programa terminara cuando es cerrada
public void windowClosing(WindowEvent e) {// evento de cerrado de la pantalla
System.exit(0);<// termino del programa
;}
});
}

bueno hasta aca ok, claro que no soy un as de la programacion y ciertas cosas me quedaron un poco grandes, pero conforme vaya avanzando quizas aprende como funcionan y porque.

La gracia viene aca…

public BufferedImage loadImage(String nombre) {
    URL url=null;
        try {
            url = getClass().getClassLoader().getResource(nombre);
            return ImageIO.read(url);
        } catch (Exception e) {
            System.out.println("No se pudo cargar la imagen " + nombre +" de "+url);
            System.out.println("El error fue : "+e.getClass().getName()+" "+e.getMessage());
            System.exit(0);
            return null;
        }
    }

    public void paint(Graphics g) {
        BufferedImage bicho = loadImage("res/bicho.gif");
        g.drawImage(bicho, 40, 40,this);
}
<span><span style="font-size: 12pt; font-family: &quot;&quot;;">
<pre>

Hasta aca si uno copio y pego el codigo en su ide te dio un error, primero podria ser que no t bajaste la figurita, esta en la parte de abajo, y lo otro es que t mande este error

java.lang.IllegalArgumentException input == null!

bueno el error esta en 3 lineas de codigo

URL url=null;

url = getClass().getClassLoader().getResource(nombre);

BufferedImage bicho = loadImage("res/bicho.gif");

especialmente en la penultima, resulta pues que URL como su nombre lo dice es para url, osea www.algo.com, pero no para archivos pueden leer el api http://java.sun.com/j2se/1.4.2/docs/api/java/net/URL.html (ia ven ahi esta el ingles). por tanto , y en esto me demore buscando porque, aunque es facil corregirlo, cometi errores en el camino y es que io a veces hago unas que asombran, pero fallo en otras que la gente solo puede reirse de mi :( bueno para corregir el codigo es asi:

public BufferedImage loadImage(String nombre) { //vamos a cargar una imagen y mostrarla sobre la ventana
    File file=null;
        try {
        //String path =  this.getClass().getClassLoader().getResource(nombre).getPath();
        //System.out.println(path);
            file = new File(nombre); // file con la nueva ruta de la imagen
            return ImageIO.read(file); //utilizamos la clase ImageIO para invocar el grafico
        } catch (Exception e) {
            System.out.println("No se pudo cargar la imagen " + nombre +" de " + file.getAbsolutePath()); // se imprime la ruta
            System.out.println("El error fue : "+e.getClass().getName()+" "+e.getMessage());// se imprime el error
            System.exit(0);
            return null;
        }
    }

    public void paint(Graphics g) { // sobrescribimos el heredado metodo paint() de Canvas
    //        g.setColor(Color.red); // color rojo
    //        g.fillOval( WIDTH/2-10, HEIGHT/2-10,20,20); // dibujamos
        BufferedImage bicho = loadImage("imagenes/bicho.gif"); // busca la imagen
        g.drawImage(bicho, 40, 40,this);// dibuja el bicho de tamaño 40x40
}
<span><span style="font-size: 12pt; font-family: &quot;&quot;;">
<pre>

Les explico cual es la jugada aca, la clase File es una clase que t permite leer archivos como imagenes, words, etc, en este caso le doy la ruta "imagenes/bicho" esta ruta se da porque imagenes esta en mi carpeta raiz, para que entiendan estos son mis directorios, juegos es mi carpeta raiz

juegos ---- src --- invaders --- invaders.java <- archivo java

juegos ---- imagenes --- bicho.gif

ahora la linea de codigo que omiti y que es importante es

getClass().getClassLoader().getResource(nombre);

esta clase se explica al final del capitulo, y bueno por ahora para que funcione el programita con lo mio basta, pero despues tenemos que usarlo. bueno eso es to... eso es to... eso es todo amigos XD

Aún no hay comentarios »

Aún no hay comentarios.

Canal RSS de los comentarios de la entrada. URI para TrackBack.

Deja un comentario

Blog de WordPress.com.