Un videojuego repite un bucle sin parar
Un bucle de juego (en inglés, game loop) es el código que un videojuego repite decenas de veces por segundo. Primero actualiza lo que pasa y luego lo dibuja. Gracias a él, un cuadrado quieto se convierte en algo que se mueve.
Al final sabrás explicar qué hace el bucle en cada imagen y calcular dónde estará un objeto dentro de diez imágenes. Lo verás en un juego pequeño del laboratorio, Catch the stars (Atrapa las estrellas).
Al terminar esta lección
Nota
Puedo explicar qué hace un bucle de juego en cada fotograma y calcular dónde está un objeto tras varios fotogramas.
Palabras clave
| Palabra | Qué significa | Ejemplo |
|---|---|---|
| Fotograma | una imagen del juego; se dibujan muchas por segundo | 60 por segundo |
| Bucle de juego | el código que se repite en cada fotograma: actualizar y dibujar | |
| Actualizar | cambiar los números del juego: posiciones, puntos, vidas | update() |
| Dibujar | pintar en pantalla lo que dicen esos números | draw() |
| Constante | un número con nombre al principio del código, fácil de cambiar | GRAVITY |
| Velocidad | cuánto se mueve algo en cada fotograma | 6 píxeles |
Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.
Un juego dibuja muchas imágenes por segundo
Un cuaderno de dibujos animados funciona igual que un juego. Cada hoja es una imagen y, al pasarlas deprisa, parece que algo se mueve.
Un juego suele dibujar unas 60 imágenes por segundo. Cada una dura unos 17 milisegundos. En ese tiempo el programa tiene que calcular y pintar todo, y empezar otra vez.
Actualizar cambia números y dibujar los muestra
Actualizar no pinta nada. Solo cambia números: la posición del jugador, la altura de una estrella, los puntos. Dibujar no cambia nada. Solo mira esos números y los pinta.
Por eso un objeto se mueve: en cada fotograma, actualizar suma su velocidad a su posición, y dibujar lo pinta un poco más allá. Después, el bucle le pide al navegador otra vuelta.
El bucle del juego del laboratorio
function loop() {
update();
draw();
window.requestAnimationFrame(loop);
}
loop();La posición tras cada fotograma
| Fotograma | Posición antes | Velocidad | Posición después |
|---|---|---|---|
| 1 | 0 | 6 | 6 |
| 2 | 6 | 6 | 12 |
| 3 | 12 | 6 | 18 |
| 4 | 18 | 6 | 24 |
| 5 | 24 | 6 | 30 |
Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.
Busca el bucle en el código del laboratorio
El juego del laboratorio está en la carpeta game: tres archivos, y casi todo está en game.js. Para mirarlo hay un script en Python que lee ese archivo y escribe qué contiene.
El script escribe en inglés. Verás nueve constantes con su valor, como GRAVITY = 0.15, la línea uses requestAnimationFrame: True y la lista functions: con ocho funciones.
Leer las constantes y las funciones del juego
docker exec jupyter python3 steps/loop.pySe muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
Qué pide el navegador con requestAnimationFrame
requestAnimationFrame le pide al navegador que vuelva a llamar a una función cuando vaya a dibujar el siguiente fotograma. La función loop se llama a sí misma así, y ese es el bucle.
El comando de abajo busca esa palabra en game.js. Escribe una sola línea, con su número: la 112.
Buscar la línea que repite el bucle
docker exec jupyter grep -n "requestAnimationFrame" 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 juego entero cabe en cinco kilobytes
El tercer script mide los tres archivos. Escribe en inglés una línea por archivo, con su tamaño en bytes, y al final la palabra total.
Verás 667 bytes para index.html, 442 para style.css y 4399 para game.js: 5508 en total. No hay motor ni biblioteca, solo lo que ya trae el navegador. Juega una partida en la vista previa y fíjate en cómo cae cada estrella.
Medir los tres archivos del juego
docker exec jupyter python3 steps/sizes.pySe muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
Un error frecuente
Advertencia
Mucha gente cree que dibujar mueve las cosas. No es así: dibujar solo pinta. Si cambias la posición dentro de draw, mezclas dos trabajos y el juego se vuelve difícil de arreglar. Los números se cambian en actualizar.