miércoles, 6 de abril de 2016

Movimiento de personajes (imágenes)


Los personajes se moverá por el escenario constantemente y rebotarán cuando lleguen a un borde.


 //creamos objeto
 PImage fondo;
 //creamos objeto
 PImage pescado1; //primer disfráz
 PImage pescado2; //segundo disfráz
//Aquí se deberán instanciar todos los clones del objeto pez que se utilizarán
fish1 pez1 = new fish1(int(random(480)), int(random(400)), int(random(1,7)));
fish1 pez2 = new fish1(int(random(480)), int(random(400)), int(random(1,7)));
fish1 pez3 = new fish1(int(random(480)), int(random(400)), int(random(1,7)));
fish1 pez4 = new fish1(int(random(480)), int(random(400)), int(random(1,7)));
fish1 pez5 = new fish1(int(random(480)), int(random(400)), int(random(1,7)));

void setup() {
    size(480, 360);
      //cargamos imagen fondo
        fondo = loadImage("imagenes/8.png");
      //y cargamos imagenes disfraces del personaje
      pescado1 = loadImage("imagenes/1.png");
      pescado2 = loadImage("imagenes/2.png");
      //La carga de imágenes es un proceso lentísimo por eso conviene hacerlo una única vez, y el lugar más indicado es el setup()
}

void draw(){
        //la mostramos, en este caso a partir del punto 1,1
        //el ancho de la imagen es el mismo de la ventana,
        //el alto de la imagen es el mismo de la ventana
        image(fondo,1, 1, width, height);
        //Mostramos a los clones del personaje en la ventana     
        pez1.mostrar();
        pez2.mostrar();
        pez3.mostrar();
        pez4.mostrar();
        pez5.mostrar();
}

class fish1 {//programa del personaje
   //variables con las posiciones x e y del personaje
   float x;
   float y;

   int velocidad =5;  //contiene la velocidad del personaje
   int cambio = 0;     //se utiliza para saber que acaba de producirse un cambio
   int direccion = 0; //contiene si el movimiento es hacia izquierdas o derechas
   float scala = 0.5; //afecta al tamaño del disfráz

   void setup(){//método no utilizado que se suele poner para opciones de configuración, Al estar vacío, se puede quitar sin consecuencias
   }

   fish1(float pez_x, float pez_y, int pez_v) {  //Método constructor
       x = pez_x;
       y = pez_y;
       velocidad = pez_v;
    }

   void mostrar(){

        if (x > width) {
            //Sí el pez se sale de la ventana por el lado derecho
            //ponemos 1 en dirección para saber que a partir de ahora se tiene que mover hacia la izquierda
            direccion = 1;
        }

        if (x < -100) {
            //Sí el pez se sale de la ventana por el lado izquierdo
            //ponemos 0 en dirección para saber que a partir de ahora se tiene que mover hacia la izquierda
           direccion = 0;
        }



        if (direccion == 0){
            if (cambio == 0){

                //si el pez se mueve hacia la derecha y si hay que hacer un cambio de personaje
                //colocamos el personaje a una altura aleatoria
                 y = random(100,height);

                //cambiamos la alarma de cambio
                 cambio = 1;

                //cambiamos el tamaño del disfráz
                 scala = 0.5 + random(0.5);
            }

            //movemos el disfraz hacia su nueva posición
            x =  x+velocidad;

            image(pescado1,x, y, 100*scala, 100*scala);
        }else{
             if (cambio == 1){

                  //si el pez se mueve hacia la derecha y si hay que hacer un cambio de movimiento
                  //colocamos el personaje a una altura aleatoria
                  y = random(100,height);
                  //cambiamos la alarma de cambio
                  cambio = 0;
                  //cambiamos el tamaño del disfráz
                  scala = 0.5 + random(0.5);
            }
        x -= velocidad;
           image(pescado2,x, y, 100*scala, 100*scala);
        }

    }

}
Primer disfráz

Segundo disfáz

Fondo 
(C) Dpto Tecnología
IES Antonio Machado
Alcalá de Henares
Abril 2016