Leonardo Maldonado - Proyecto Imagen Escrita 2019 T1

De Casiopea



TítuloLeonardo Maldonado - Proyecto Imagen Escrita 2019 T1
AsignaturaImagen Escrita
Del CursoImagen Escrita 2019
CarrerasFormación y Oficio"Formación y Oficio" is not in the list (Arquitectura, Diseño, Magíster, Otra) of allowed values for the "Carreras Relacionadas" property., Interacción y Servicios"Interacción y Servicios" is not in the list (Arquitectura, Diseño, Magíster, Otra) of allowed values for the "Carreras Relacionadas" property., Otra
1
Alumno(s)Leonardo Maldonado


Link: http://chaleco.org/files/imagenEscrita/


ArrayList<Platform> p;
boolean iscolliding = false; // chequeo de colisión
PVector pos; //se utilizan vectores tanto para la posición como para la velocidad, con valores en x e y
PVector vel;
float moving = 0;
float walk = 2;
PImage bg; //fondo


void setup() {
  size(280, 256);
  bg = loadImage("bg.jpg");
  p = new ArrayList<Platform>(); // esto determina el randomizador de plataformas que aparecen
  float y = height/2;
  float ory = y; // esto hace que siempre se spawnée sobre una plataforma y no en el aire
  for(int i = 0; i < width/25; i++) {
    p.add(new Platform(i*25, y));    
    y += random(-25, 25); //ajusta la diferencia de altura posible entre plataformas
  }
  pos = new PVector(5, ory); //posición inicial del personaje
  vel = new PVector(); 
}

void draw() {
  background(bg);
  iscolliding = false; // chequeo de colisión
  for(Platform i: p) {
    i.show();
    if(i.collide(pos)) { //si es que está colisionando, se activa el boolean
      iscolliding = true;
      pos.y = i.pos.y; //"si es que está a la misma altura de la plataforma, que se quede en esa altura"
    }
  }
  fill(#626e2f);
  noStroke();
  ellipse(pos.x, pos.y-5, 10, 10);
  if(!iscolliding) { //se niega para saber si es que no está colisionando, en ese caso se activa la aceleración "gravitacional"
    vel.y += 0.7; //aceleración de la "gravedad"
  }
  pos.add(vel);
  pos.x += moving; //desplazamiento cuando se presionen las teclas mencionadas más abajo (1)
  vel.mult(0.7);
}

void keyPressed() { // (1) movimiento de la pos.x
  if(key == CODED) { //CODED es necesario para usar teclas especiales
    if (keyCode == LEFT) {
      moving = -walk;
    }
  }
  if(key == CODED) {
    if (keyCode == RIGHT) {
      moving = walk;
    }
  }
  if(key == ' ') { // salto
    if(iscolliding) {
      vel.y -= 10;
    }
  }
}

void keyReleased() { 
  if(key == CODED) {
    if (keyCode == LEFT) {
      moving = 0;
    }
  }
  if(key == CODED) {
    if (keyCode == RIGHT) {
      moving = 0;
    }
  }
}

//esto es para generar plataformas, líneas de 25 pixeles de largo 
class Platform {
  PVector pos;
  Platform(float x, float y) {
    pos = new PVector(x, y);
  }
  void show() {
    stroke(#626e2f);
    line(pos.x, pos.y, pos.x+25, pos.y);
  }
  boolean collide(PVector p) { //se crea la colisión de cada línea
    if(p.x > pos.x && p.y > pos.y && p.x < pos.x+25 && p.y < pos.y+10) {
      return true;
    }
    return false;
  }
}