¿Te resulta más fácil leer con fondo crema, un tono de color, más contraste o un texto más grande? Elige tus colores y tu texto una sola vez, para todas las páginas.

Lección gratuita

El bucle de juego

Después de esta lección: Puedo explicar qué hace un bucle de juego en cada fotograma y calcular dónde está un objeto tras varios fotogramas.

Lección de 60 min3 comandosLaboratorio de desarrollo de juegos: bucle de juego, gravedad y colisiones en el navegador

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

PalabraQué significaEjemplo
Fotogramauna imagen del juego; se dibujan muchas por segundo60 por segundo
Bucle de juegoel código que se repite en cada fotograma: actualizar y dibujar
Actualizarcambiar los números del juego: posiciones, puntos, vidasupdate()
Dibujarpintar en pantalla lo que dicen esos númerosdraw()
Constanteun número con nombre al principio del código, fácil de cambiarGRAVITY
Velocidadcuánto se mueve algo en cada fotograma6 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

Código: web
function loop() {
  update();
  draw();
  window.requestAnimationFrame(loop);
}

loop();

La posición tras cada fotograma

FotogramaPosición antesVelocidadPosición después
1066
26612
312618
418624
524630

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

Comando
docker exec jupyter python3 steps/loop.py

Se 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

Comando
docker exec jupyter grep -n "requestAnimationFrame" game/game.js

Se 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

Comando
docker exec jupyter python3 steps/sizes.py

Se 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.

Sobre este laboratorio y su código: Laboratorio de desarrollo de juegos: bucle de juego, gravedad y colisiones en el navegador

¿Enseñas a una clase? Asigna este módulo a tus alumnos con guía del profesor, tareas con corrección automática y un laboratorio para cada alumno.