Leonardo Maldonado - Proyecto Imagen Escrita 2019 T1
De Casiopea
Título | Leonardo Maldonado - Proyecto Imagen Escrita 2019 T1 |
---|---|
Asignatura | Imagen Escrita |
Del Curso | Imagen Escrita 2019 |
Carreras | Formació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 |
Nº | 1 |
Alumno(s) | Leonardo Maldonado |
Demo (sin audio): http://chaleco.org/files/imagenEscrita/
Partidas
- Personaje
- Definición del personaje (una elipse de 10x10px)
- Colisión del personaje (si es que está en la misma altura que una plataforma, se activa)
- Definición de vectores de movimiento del personaje (PVector)
- Definición de controles de desplazamiento (izquierda, derecha, salto)
- Etapa
- Creación de un array que guarde la serie de plataformas
- Definición de plataformas (líneas de 25 px)
- Randomización de plataformas (cada vez que se lanza la aplicación, cambia la distribución)
- Limitación de altura máxima entre plataformas (hasta 25 pixeles de diferencia)
- Detalles
- Importar un fondo (PImage)
- Importar sonidos (librería de audio)
- Sonido de fondo, activado "on Setup"
- Sonido de salto, activado "on keyPressed(" ")"
import processing.sound.*; //pal audio SoundFile fileBGM; SoundFile fileJump; 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(); fileBGM = new SoundFile(this, "bgm.mp3"); //música fileBGM.play(); } 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; } } fileJump = new SoundFile(this, "jump.wav"); //sonido de salto if(key == ' ') { // salto if(iscolliding) { vel.y -= 10; fileJump.play(); } } } 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; } }