viernes, 1 de febrero de 2013

Amimacion Interna de Imagenes o Sprites

Hola... ahora te voy a enseñar a realizar una animacion interna en una Imagen o Sprite usando el metodo TIMER. Lo que primero debes hacer es bajarte las imagenes del programa que estan aqui....











Listo!!! ahora vamos al codigo explicado....

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.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
      public Principal()
      {
            super("Animacion Interna 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
        cargaImagen();
        repaint();
        run();     
       
      }
public void cargaImagen(){
           
           
            img = new Image[10];//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 < 7; 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) {
              
                numeroImagen++;
                if(numeroImagen == 7)
                {
                  numeroImagen = 1;
                }
               
                
            }
        });
            timer1.start();
           
           
      }
     
      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], 50, 80, 90, 156, null);
            estrategia.show();
            repaint();
           
      }

     
}

  
Notas sobre el codigo:
Implements Runnable .- Se usa para crear una tarea dentro del programa para que este la realize consecutivamente este es en otras palabras el MAIN LOOP del juego!

Timer .- Es un bucle que se repite cada cierto tiempo en milisegundos en el caso de nuetro programa se repite cada 200 milisegundos.

Si tienes dudas de como cargar una imagen o para que sirve el BUFFER puedes visitar los anteriores Post...



Tambien puedes preguntar en la parte de Comentarios asi te respondo mas rapido
SUERTE!!!!

9 comentarios:

  1. Hola, a estas alturas del post, has perdido el sprite #2 del personaje, por lo que renombré todas las sprites siguientes, así que solo me quedé con 5 sprites. De todas maneras, hay un blinking o parpadeo cuando el ciclo for se reinicia. ¿A qué se debe? Incluso con 1 sola sprite, ocurre este blinking. Saludos.

    ResponderEliminar
  2. Muchas gracias por compartir algo que me tarde en encontrar. Saludos.

    ResponderEliminar
  3. Muchas gracias por compartir algo que había estado buscando por mucho tiempo. Saludos.

    ResponderEliminar
  4. Muchas gracias por compartir algo que había estado buscando por mucho tiempo. Saludos.

    ResponderEliminar
  5. Muchas gracias por compartir algo que me tarde en encontrar. Saludos.

    ResponderEliminar
  6. Hola Chelobotix, Garcias por tu esfuerzo de documentar y compartir tu código, es bueno ser agradecido con las personas desinteresas que comparten como tú.

    ResponderEliminar
  7. agradecido con el de arriba,pero el de mas arriba, con el todo poderoso vuelto mi socio también mi amigo.

    ResponderEliminar
  8. Stainless Steel Double-Edge Blades - Titanium-Arts.com
    More items Stainless Steel Double-Edge Blades - Titanium-Arts.com. More chi titanium flat irons products. Stainless Steel Double-Edge Blades - titanium automatic watch Stainless titanium dioxide skincare Steel Double-Edge ridge titanium wallet Blades - Titanium-Arts.com. More titan metal items. Stainless Steel Double-Edge Blades - Stainless Steel Double-Edge Blades - Stainless  Rating: 5 · ‎1 review

    ResponderEliminar