martes, 12 de febrero de 2013

Animación Interna y Externa de Imagenes o Sprites

Ok ahora vamos a darle mas vida a nuestro Sprite haciendo que camine cuando precionemos la flecha derecha del teclado...
Primero bajate las imagenes necesarias aqui...





















Ahora importalas a la carpeta de tu proyecto en Eclipse, si no sabes como hacer esto puedes leer mi otro tutorial Como mostrar Imagenes en JAVA

Y bueno aca sta el codigo....


import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.image.BufferStrategy;
import java.io.IOException;
import java.io.InputStream;
import javax.imageio.ImageIO;
import javax.swing.*;

public class Principal extends JFrame implements Runnable {
      Image []img;//declaramos un vector de imagenes
      Image fondo; //declaro la imagen que sera el fondo
      InputStream imgStream;
      private BufferStrategy estrategia;//llamo a la clase
      int numeroImagen; //esta variable controla que imagen mostrar
      Timer timer1; //declaramos nuestro Timer
      int x; //la variable que establece la posicion en x
      boolean nomueve;
      public Principal()
      {
            super("Animacion Interna y Externa Sprite");        
            this.setSize(600, 250);
        this.setVisible(true);
        this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        this.createBufferStrategy(2);
        estrategia = getBufferStrategy();
        numeroImagen = 1;//inicio la variable con la primera imagen
        x = 50;
        nomueve = true;
        this.addKeyListener(kl);
        cargaImagen();
        repaint();
        run();     
       
      }
public void cargaImagen(){
           
           
            img = new Image[20];//inicializamos el vector de tamaño 10
            try {
                  imgStream = Principal.class.getResourceAsStream("images/fondo.jpg");//inicializo la imagen de fondo
                  fondo = ImageIO.read(imgStream);
                  for(int i = 1 ; i < 16; i++)//cargamos las imagenes en el vector ojo mis imagenes se llamas 0.png, 1.png, etc
                  {
                       
                        imgStream = Principal.class.getResourceAsStream("images/"+i+".png");
                        img[i] = ImageIO.read(imgStream);
                  }
                 
            } catch (IOException e) {
                  // TODO Auto-generated catch block
                  e.printStackTrace();
            }
           

      }
     
      public void run() {
           
            timer1 = new Timer(200,new ActionListener() {

            public void actionPerformed(ActionEvent e) {
              
                if (nomueve == true)
                {
                  numeroImagen++;
                  if(numeroImagen >= 7)
                  {
                        numeroImagen = 1;
                  }
                }
                else
                {
                  if(numeroImagen <= 7)//obligo a que la imagen comienze a caminar en el fotograma 8
                  {
                        numeroImagen = 8;
                  }
                  numeroImagen++;
                  if(numeroImagen == 15)
                  {
                        numeroImagen = 8;
                  }
                 
                }
                 
                   
            }
        });
            timer1.start();
           
           
      }
     
      KeyListener kl = new KeyListener(){
           
           
            public void keyPressed(KeyEvent arg0) {
                  int codigo = arg0.getKeyCode();
                 
                  if(codigo == KeyEvent.VK_RIGHT)
                  {
                        nomueve = false;
                        x = x + 5;
                  }
                 
                 
            }          
            public void keyReleased(KeyEvent arg0) {
                 
                  nomueve = true; //si no hay teclas precionadas entonces el movimiento normal de GORO
                 
            }

            public void keyTyped(KeyEvent arg0) {
                  // TODO Auto-generated method stub
                 
            }
      };
           
      public static void main(String[] arg)
      {
            new Principal();
      }
      public void paint(Graphics g){
           
            Graphics g3 = (Graphics2D)estrategia.getDrawGraphics();
            g3.drawImage(fondo, 0, 0, 600, 250, null);
            g3.drawImage(img[numeroImagen], x, 80, 90, 156, null);
            estrategia.show();
            repaint();
           
      }

     
}




Espero que les haya gustado, cualquier duda coloquenla en los comentarios junto con su mail...