import java.applet.Applet;
import java.awt.Image;
import java.awt.Graphics;
import java.awt.Color;
import java.awt.event.MouseListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionListener;
import java.awt.MediaTracker;
public class CargadorImagenesApplet extends Applet 
   implements Runnable, MouseListener, MouseMotionListener {
   private Image [] lasImagenes;
   private Image laImagenBuffer;
   private Graphics elBuffer;
   private int elAncho,elLargo;
   private int elIndiceActual=0;
   private boolean parar=false;
   public final static int PAUSA=500;
   private int locX=120,locY=100;

   public void mouseDragged(MouseEvent elEvento){}
   public void mouseMoved(MouseEvent elEvento){ 
       locX= elEvento.getX(); locY=elEvento.getY();
       repaint();
   }
   public void mouseClicked(MouseEvent elEvento){}
   public void mousePressed(MouseEvent elEvento){
       locX= elEvento.getX(); locY=elEvento.getY();
       repaint();
   }
   public void mouseReleased(MouseEvent elEvento){}
   public void mouseEntered(MouseEvent elEvento){}
   public void mouseExited(MouseEvent elEvento){}
   public void init() {
     MediaTracker elCargador = new MediaTracker(this);
     lasImagenes = new Image[6];
     for (int i=0;i<lasImagenes.length;i++) {   
        lasImagenes[i]= super.getImage(getCodeBase(),"image/ufo"+i+".gif");
        elCargador.addImage(lasImagenes[i],0);
     }
     try {
       elCargador.waitForAll();//espera a que todas las imagenes cargen
       if (elCargador.checkAll() ) { //solo si cargaron con exito todas las imagenes
        elAncho = this.getBounds().width;elLargo=this.getBounds().height;
        laImagenBuffer = super.createImage(elAncho,elLargo);
        elBuffer = laImagenBuffer.getGraphics();
        super.addMouseListener(this);//esperar por eventos
        super.addMouseMotionListener(this);
       }
     } catch (InterruptedException ex) { ex.printStackTrace();}
   }
   public void paint(Graphics g) {
      elBuffer.setColor(Color.black);
      elBuffer.fillRect(0,0,elAncho,elLargo);
      elBuffer.drawImage(this.lasImagenes[elIndiceActual] ,locX,locY,this);
      g.drawImage(laImagenBuffer,0,0,this);
   }
   public void update(Graphics g) { this.paint(g); }
   public void start() { Thread th = new Thread(this); th.start();}
   public void run() {
        while (!parar) {
          repaint();  elIndiceActual++; elIndiceActual%=lasImagenes.length;
          try { Thread.sleep(PAUSA); } catch (Exception ex) {}
        }
   }
  
}














