Como hacer movimientos avanzados

Saludos.
Me gustaria saber como hacer movimientos avanzados para mover un objeto como el de este video que voy a poner.


En el minuto 3:39 salen unos aviones rojos por la izquierda y parece que siguen una ruta,en el minuto 3:54 otra fila de aviones que sale por la derecha y sigue una ruta.En el minuto 4:47 sale un avion medio grande con un movimiento como bailando y en el minuto 4:58 sale un barco mediano con un movimiento bastante realista,es como si lo estuviera manejando una persona,en el minuto 5:23 sale un avion negro mediano con un movimiento realista.

Como se pueden programar esos movimientos.

1 Like

¿usted puede hablar inglés? Mira el libro Nature Of Code, Daniel Shiffman, para movimientos más realistas físicamente.

1 Like

No se casi nada de ingles y por lo que he visto,en programacion si no sabes ingles estas perdido, porque casi toda la documentacion esta en ingles.

1 Like

Hay muchas maneras. Para movimientos con guiones simples, como los movimientos en su video de ejemplo, un método es hacer una lista de puntos (“waypoints”). Puede usar PVector.

Luego deslice un objeto entre los puntos de la lista. Para hacer eso, use una función como esta:

PVector lerpVectors(float amt, PVector... vecs) {
  if(vecs.length==1){ return vecs[0]; }
  float unit = 1.0/(vecs.length-1);
  return PVector.lerp(vecs[floor(amt / unit)], vecs[ceil(amt / unit)], amt%unit/unit);
}

Aquí hay una discusión previa:

Gracias @jeremydouglass.

PVector lerpVectors(float amt, PVector… vecs),¿que son esos tres puntos que tiene PVector…?,no entiendo que significa.

“…” = Java varargs.

Significa que para este argumento puede usar PVector, o muchos PVectors a, b, c, d ..., o puede usar una array, PVector [].

Entonces crea una ruta, luego mueve un objeto en la ruta de esta manera:

PVector[] ruta = new PVector[4];

void setup() {
  ruta[0] = new PVector(-10, 10);
  ruta[1] = new PVector(90, 10);
  ruta[2] = new PVector(10, 90);
  ruta[3] = new PVector(110, 90);
}

void draw() {
  background(128);
  PVector obj = lerpVectors(mouseX/(float)width, ruta);
  ellipse(obj.x, obj.y, 20, 20);
}

PVector lerpVectors(float amt, PVector... vecs) {
  if (vecs.length==1) { 
    return vecs[0];
  }
  float unit = 1.0/(vecs.length-1);
  return PVector.lerp(vecs[floor(amt / unit)], vecs[ceil(amt / unit)], amt%unit/unit);
}
1 Like

Muchas gracias @jeremydouglass. :+1:

Voy a estudiar con detenimiento ese codigo,tambien comentarte que he encontrado un canal de youtube con muchos tutoriales en español de processing,voy a poner el enlace aqui para que otros con problemas con el ingles tambien puedan aprender processing.

Saludos.

2 Likes