Single Tech Games

juego en java 2D – 1er dia

Actualizo el 03/05/2012… Ufff Cuanto tiempo estuve revisando los links y al parecer planetalia ya no pone el curso así que decidí postear el código fuente, este código no tiene ninguna explicación, solo es el código que encontré entre mis carpetas de muuuuuucho tiempo. Me imagino que ahora hay muchos mejores tutoriales, pero igual lo posteo para cualquier referencia, el código esta acá
Comienzo este mi segundo blog después de muuucho tiempo, bueno contándoles 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 están en linea y están en ingles… bueno si no sabes ingles aprende, porque la mejor información en computación están 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 yo con el ingles técnico no me llevo tan bien es por eso que mejor comienzo aprendiendo lo básico en español y después me muevo a lo mas difícil 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 único 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 después 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 telefónica del perú… osea… así que tuve que conformarme con la versión 6.0.1
Bueno los 3 primeros capítulos fueron muy fáciles, es mas escribí un poco de ayuda en el código, que publicare mas adelante, la gracia vino en el capitulo 4 donde te sigue atiborrando de código pero como no t dice como funciona, a una pequeña duda que t quedo y t perdiste. bueno ahora si el código:

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);Bueno hasta acá ok, claro que no soy un as de la programación y ciertas cosas me quedaron un poco grandes, pero conforme vaya avanzando quizás aprende como funcionan y porque. La gracia viene acá...
 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); } style="font-size: 12pt; font-family: "";">

Hasta acá si uno copio y pego el código en su ide te dio un error, primero podría 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 código
URL url=null;
url = getClass().getClassLoader().getResource(nombre);
BufferedImage bicho = loadImage(“res/bicho.gif”);
especialmente en la penúltima, 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 (ya ven ahí esta el ingles). por tanto , y en esto me demore buscando porque, aunque es fácil corregirlo, cometí errores en el camino y es que yo a veces hago unas que asombran, pero fallo en otras que la gente solo puede reírse de mi 🙁 bueno para corregir el código es así:

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
}
style="font-size: 12pt; font-family: "";">

Les explico cual es la jugada acá, la clase File es una clase que t permite leer archivos como imágenes, words, etc, en este caso le doy la ruta “imágenes/bicho” esta ruta se da porque imágenes esta en mi carpeta raíz, para que entiendan estos son mis directorios, juegos es mi carpeta raíz
juegos —- src — invaders — invaders.java <- archivo java
juegos —- imagenes — bicho.gif
ahora la linea de código 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 después tenemos que usarlo. bueno eso es to… eso es to… eso es todo amigos XD
Buena Suerte!

0 0 votes
Article Rating
Subscribe
Notify of
guest
2 Comments
Newest
Oldest Most Voted
Inline Feedbacks
View all comments
Christopher A.

Primer blog que encuentro tan instructivo, me gustaría poder interactuar con ustedes, y aprender a programas en Java…