animacion de muñeco ó persona corriendo echo en java con hilos

Technology

animacion de muñeco ó persona corriendo echo en java con hilos

bueno se utilizara unas imagenes que las pueden conseguir en google imagenes llamada sprite, sin embargo les dejare las imagenes aqui en el blog para que las descarguen, el programa es una animacion de un muñeco corriendo hacia una puerta al oprimir un boton , se utilizara  Graphics, JComponent,hilos, y un panel empezemos

1. debemos crear 4 paketes ó 4 carpetas (lo siento yo trabajo asi ) en los cuales las llamaremos model, controller,imagenes,y visual ahora nos paramos en el pakete model y creamos la clase animado el cual ponemos el siguiente codigo:




/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package model;

import java.awt.Color;
import java.awt.Graphics;
import javax.swing.ImageIcon;
import javax.swing.JOptionPane;
import javax.swing.JPanel;

/**
 *
 * @author andres8822
 */
public class animado {
     private JPanel panel=null;
     Graphics g2=null;
      public Thread hilo1=null;
     
    public int x=0,y=0,posx=50,posy=200,img1=1;
    
    
         ImageIcon image =new ImageIcon(new ImageIcon(getClass().getResource("/imagenes/puerta.gif")).getImage()); 
  private boolean chocapuerta=false;
    
  public animado(JPanel j){
  panel=j;
  x=getPanel().getWidth()-100;
  y=getPanel().getHeight()-200;
  
      System.out.println("tamaño puerta x"+x+"tamaño puerta y ="+y);
  }
    
  public void paint(Graphics g){
     g2=g;
      
      g.drawImage(image.getImage(), x,  y,100, 150,   null);   
  if(chocapuerta){
g.setColor(Color.red);   
 g.drawRect(posx-10, posy, 20, 300);   
  
 
 //
  ImageIcon image2 =new ImageIcon(new ImageIcon(getClass().getResource("/imagenes/noentra/"+img1+".png")).getImage());
                 g.drawImage(image2.getImage(), posx, posy,400, 300,   null); 

     img1++;
                  if(img1==8){
                  img1=1;
                  }              
                 //
  }  
  }
  
  public void animacion(){

         
   this.panel.getGraphics().drawLine(30, 30,45, 60);
 if(!hilo2.isAlive()){
            hilo2.start();
 }
 
 else{
 hilo2.resume();
 chocapuerta=true;
 posx=50;
 }
      
  }

    /**
     * @return the chocapuerta
     */
    public boolean isChocapuerta() {
        return chocapuerta;
    }

    /**
     * @param chocapuerta the chocapuerta to set
     */
    public void setChocapuerta(boolean chocapuerta) {
        this.chocapuerta = chocapuerta;
    }
    
    
     private Thread hilo2 = new Thread()
    {
        

        @Override
        public void run()
        {
            try
            {
                while(true)
                {
                    System.out.println("pos x"+posx);
         
               /*   ImageIcon image2 =new ImageIcon(new ImageIcon(getClass().getResource("/imagenes/noentra/"+img1+".png")).getImage());
                 panel.getGraphics().drawImage(image2.getImage(), posx, posy,400, 300,   null);     
             
              */
          
               
                  img1++;
                  if(img1==8){
                  img1=1;
                  }
                  
                  if(posx==850){
                hilo2.suspend();  
                  
                  }
               panel.repaint();   
                 posx+=10;
                 
                 
               
                  hilo2.sleep(100);
                   
                
                     
                     
                }
            } catch (java.lang.InterruptedException ie) { System.out.println(ie.getMessage()); }
        }
    };

    /**
     * @return the panel
     */
    public JPanel getPanel() {
        return panel;
    }

    /**
     * @param panel the panel to set
     */
    public void setPanel(JPanel panel) {
        this.panel = panel;
    }

    /**
     * @return the hilo2
     */
    public Thread getHilo2() {
        return hilo2;
    }

    /**
     * @param hilo2 the hilo2 to set
     */
    public void setHilo2(Thread hilo2) {
        this.hilo2 = hilo2;
    }
}

luego dentro del pakete  controller creamos la siguiente clase  de nombre dibujartodo y ponemos el sigueinte codigo:




/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package controller;

import java.awt.Graphics;
import javax.swing.JComponent;
import javax.swing.JPanel;
import model.animado;

/**
 *
 * @author andres2288
 */
public class dibujartodo extends JComponent{
     private animado anima;

       public dibujartodo(JComponent contenedor,JPanel j){
                 super();
       this.setBounds(0, 0,contenedor.getWidth() , contenedor.getHeight());
       contenedor.add(this);
       anima= new animado(j);
       }
       
       public void cuadraelpanel(JPanel t){
       anima.setPanel(t);
       }
        public boolean llevarfalse(){
       return anima.isChocapuerta();
       }
       public void animacion(){
       anima.animacion();
       }
       public boolean isalivehilo(){
      return anima.getHilo2().isAlive();
       }
       
         @Override
    public void paint(Graphics g){
        super.paint(g);
        anima.paint(g);
    }
         
         public void animarchochapuerta(){
         anima.setChocapuerta(true);
         }
          public void noanimarchochapuerta(){
         anima.setChocapuerta(false);
         }
    
}

luego en el pakete imagenes creamos otro pakete llamado noentra el cual la ruta quedara imagenes.noentra

adentro del pakete imagenes no entra ponemos las siguientes imagenes la cual van a nombrar  con extension .png y nombradas del 1 al 8 si no saben como cambiar las extensiones  de todas imagenes a .png aqui les dejo un programa que hize en java para cambiar todas las extensiones al formato que quieran click aqui para el video y el link   bueno y finalmete las imagenes:









finalmente creamos una clase en el pakete visual  llamado vista el cual declaramos las variables siguientes en la parte de arriba al inicializar la clase:



private dibujartodo contenedor;

luego el constructor debe quedar de la siguiente manera:



  public vista() {
     super("by ANDRES2288");//"by por carlos andres buitrago ");
        initComponents();
      
           contenedor= new dibujartodo(panel1,panel1);
 
    }
obviamente debemos crear un panel llamado ó de variable panel1 y creamos un boton y la damos la opcion que al darle click mande la animacion entonces dentro del codigo del boton ponemos el siguiente codigo:



     contenedor.animarchochapuerta();
       contenedor.animacion();
        if(!hilo.isAlive()){
      hilo.start();
        }
        else{
        hilo.resume();
        }
        panel1.repaint();

y finalmente un hilo para poder actualizar el panel y paresca mas real

creo me falto el hilo en visual es este:

public Thread hilo = new Thread()



{




@Override



public void run()



{



try



{



while(true)



{




if(!contenedor.llevarfalse()){



hilo.suspend(); 




}



else{



// panel1.repaint();



}




System.out.println("holiiiiiiiiiiii");



hilo.sleep(200);




}



} catch (java.lang.InterruptedException ie) { System.out.println(ie.getMessage()); }



}



};
MOSTRAR UN VIDEO TUTORIAL
bueno y eso es todo :) a animar y crear juegos

link del codigo a descargar se los dejo en el siguiente blog
http://andresfelipe2288.blogspot.com/2013/02/descargar-codigo-java-animacion-persona.html

Post a Comment

4 Comments

  1. lo hice todo al pie de la letra y no corre :(

    ReplyDelete
  2. para eso les deje el link de descarga :)

    ReplyDelete
  3. caballero, donde esta el link de descarga

    ReplyDelete
  4. Hola Amigo.
    Gracias por el aporte, en esta página, en la información que aportas te faltan cosas para poder ejecutarlo debidamente y, además, no parece apenas ordenado. No sé si será culpa de ponerlo en el blog o qué. De todas maneras, gracias, a mi me ha servido por lo menos leer el código. voy a intentar arreglarlo para que funcione.
    Saludos.

    P.D: El link de descarga no funciona.

    ReplyDelete