Diferencia entre revisiones de «Leonardo Maldonado - Proyecto Imagen Escrita 2019 T1»
De Casiopea
(Página creada con «{{Tarea |Título=Leonardo Maldonado - Proyecto Imagen Escrita 2019 T1 |Número=1 |Asignaturas Relacionadas=Imagen Escrita |Cursos Relacionados=Imagen Escrita 2019 |Carreras…») |
Sin resumen de edición |
||
(No se muestran 5 ediciones intermedias del mismo usuario) | |||
Línea 7: | Línea 7: | ||
|Alumnos=Leonardo Maldonado | |Alumnos=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(" ")" | |||
<pre> | |||
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; | |||
} | |||
} | |||
</pre> |
Revisión actual - 11:41 20 may 2019
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; } }