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...







3 comentarios:

  1. Muy bien a excepción de que "implemnts Runnable" esta de mas ya que nunca llegas a lanzar el hilo

    ResponderEliminar
  2. una pregunta como puedo hacer para que vaya atras

    ResponderEliminar
  3. es urgente please me intereso mucho el programa pero quiero que vaya tbm para atras como hago

    ResponderEliminar