La gravedad suma velocidad en cada fotograma
La gravedad de un videojuego es un número que se suma a la velocidad de un objeto en cada fotograma. La velocidad, a su vez, cambia su posición. Por eso un objeto que cae parece acelerar, igual que en la vida real.
Al final sabrás calcular dónde está un objeto que cae tras varios fotogramas y cómo se programa un rebote. Lo verás con una estrella del juego del laboratorio.
Al terminar esta lección
Nota
Puedo mover objetos con velocidad y gravedad y calcular su posición fotograma a fotograma, incluido un rebote.
Palabras clave
| Palabra | Qué significa | Ejemplo |
|---|---|---|
| Velocidad | lo que se mueve un objeto en cada fotograma | speed |
| Gravedad | un número que se suma a la velocidad en cada fotograma | GRAVITY |
| Aceleración | el cambio de la velocidad en cada fotograma | |
| Suelo | la altura a la que un objeto deja de caer | floor |
| Rebote | invertir y reducir la velocidad al llegar al suelo | bounce |
Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.
Primero cambia la velocidad y luego la posición
Un objeto con gravedad hace dos cosas en cada fotograma, y el orden importa. Primero suma la gravedad a su velocidad. Después suma la velocidad a su posición.
En pantalla, la altura y crece hacia abajo. Una velocidad positiva baja el objeto y una negativa lo sube.
Cómo cae una estrella en el juego
star.speed = star.speed + GRAVITY * level.gravityScale;
star.y = star.y + star.speed;La caída tras cuatro fotogramas con gravedad 1
| Fotograma | Velocidad | Posición |
|---|---|---|
| Salida | 0 | 0 |
| 1 | 1 | 1 |
| 2 | 2 | 3 |
| 3 | 3 | 6 |
| 4 | 4 | 10 |
Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.
Sigue una estrella diez fotogramas en el laboratorio
Un script del laboratorio lee GRAVITY de game.js y sigue una estrella durante diez fotogramas. Escribe en inglés: gravity, y por cada frame su speed y su y.
La gravedad es 0,15. Verás la velocidad crecer de 0.15 a 1.50 y la altura llegar a 8.25 en el fotograma diez. Cada paso es mayor que el anterior.
Seguir una estrella durante diez fotogramas
docker exec jupyter python3 steps/fall.pySe muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
Dónde usa el juego la gravedad
El número de la gravedad se escribe una sola vez, arriba del archivo, como constante. Después se usa dentro de update, multiplicado por la escala del nivel.
El comando busca GRAVITY en game.js. Escribe dos líneas: la 3, donde se declara con el valor 0.15, y la 74, donde se suma a la velocidad de cada estrella.
Buscar dónde se declara y se usa GRAVITY
docker exec jupyter grep -n "GRAVITY" game/game.jsSe muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
Un rebote invierte la velocidad y la reduce
El juego del laboratorio no rebota: las estrellas desaparecen al pasar el borde. Una pelota sí necesita rebotar.
Cuando la pelota pasa del suelo, se la coloca justo en el suelo y se invierte la velocidad. Se multiplica por un número menor que uno, el rebote, y así pierde fuerza en cada bote.
Un paso de una pelota que rebota
# Un paso de la pelota: primero la velocidad, luego la posición.
speed = speed + gravity
y = y + speed
if y > floor:
y = floor
speed = -speed * bounceUna pelota que rebota, con números
| Fotograma | Velocidad | Altura | Qué pasa |
|---|---|---|---|
| 4 | 4 | 10 | Llega al suelo justo |
| 5 | 5, y luego -2,5 | 10 | Pasa del suelo: se pone en 10 y rebota |
| 6 | -1,5 | 8,5 | Sube |
| 7 | -0,5 | 8 | Sube menos |
| 8 | 0,5 | 8,5 | Empieza a bajar otra vez |
Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.
Un error frecuente
Advertencia
Mucha gente suma la gravedad directamente a la posición. Entonces la caída es lineal y no acelera. La gravedad se suma a la velocidad, y es la velocidad la que mueve el objeto.