10. 1.motor basico bucle del juego
Creando un Motor Básico para un Juego en JavaScript
En este post vamos a explorar cómo crear una estructura básica para el bucle principal de un juego usando JavaScript. Este es el fundamento de lo que podría convertirse en un motor de juego más complejo.
📝 Estructura Básica del Juego
var fps = 10;
var xEscenario = 0;
function atacar() {
console.log('estas atacando a tu enemigo!!!');
}
function mueveescenario() {
xEscenario++;
console.log(xEscenario);
}
function principal() {
mueveescenario();
}
setInterval(principal, 1000 / fps);� Explicación del Código
Variables iniciales:
fps: Fotogramas por segundo (en este caso, 10)xEscenario: Posición inicial del escenario (comienza en 0)
Función
atacar():Simula un ataque en el juego
Se activa con un botón en el HTML
Función
mueveescenario():Incrementa la posición del escenario (
xEscenario++)Muestra el valor actual en consola
Función
principal():Actúa como el núcleo del bucle del juego
Llama a
mueveescenario()en cada iteración
setInterval:Ejecuta la función
principal()repetidamenteEl intervalo se calcula como
1000 / fpspara mantener 10 actualizaciones por segundo
🚀 Cómo Funciona el Motor
El corazón del sistema es setInterval, que llama a la función principal() según la tasa de FPS establecida. Cada vez que se ejecuta:
Llama a
mueveescenario()Incrementa la posición del escenario
Muestra el nuevo valor en consola
Simultáneamente, el botón "Atacar" en la página HTML puede activar la función atacar() cuando el usuario hace clic.
💡 Por Qué es Importante
Esta estructura simple demuestra:
El concepto de bucle de juego
Control de velocidad de actualización (FPS)
Separación de responsabilidades (movimiento, acciones)
Interacción con elementos HTML
Es el punto de partida perfecto para expandir hacia un juego más complejo añadiendo gráficos, colisiones, y más mecánicas de juego.
¿Te animas a expandir este motor básico? ¡Comparte tus ideas en los comentarios!
Función actual:
Incrementa la variable
xEscenarioen 1 cada vez que se llama.Imprime el valor de
xEscenarioen la consola (conconsole.log).
Contexto:
Se llama repetidamente gracias a
setInterval(principal, 1000 / fps), que ejecutaprincipal()10 veces por segundo (porquefps = 10).Sin embargo, no hay ningún efecto visual porque el código no dibuja nada en el
<canvas>ni utilizaxEscenariopara mover elementos gráficos.
Posible propósito (lo que probablemente se intenta hacer):
xEscenarioparece destinado a controlar el desplazamiento horizontal de un fondo o escenario (como en un juego de desplazamiento lateral).En un desarrollo completo, esta variable probablemente se usaría para:
Mover una imagen de fondo (ej.
context.drawImage(backgroundImage, -xEscenario, 0)).Desplazar sprites o tiles de un juego.
Problema actual:
El código solo incrementa
xEscenarioy muestra su valor en consola, pero no hay lógica para renderizar gráficos basados en este valor.
¡Claro! Vamos a modificar tu código para que sea visual, moviendo una letra (por ejemplo, la letra "A") horizontalmente por el canvas usando xEscenario. Aquí está el código completo:
La función borraCanvas() se utiliza para limpiar todo el contenido del canvas en cada frame del juego. Esto es esencial en la programación de juegos o animaciones basadas en canvas, y aquí te explico por qué:
Limpieza entre frames: En un juego o animación, cada frame debe dibujarse desde cero. Si no limpiáramos el canvas, los elementos dibujados en frames anteriores permanecerían visibles, creando un efecto de "arrastre" o "fantasma".
Rendimiento: Es más eficiente borrar y redibujar todo que intentar borrar selectivamente partes del canvas.
Movimiento: Para crear la ilusión de movimiento, necesitamos borrar la posición anterior de los objetos antes de dibujarlos en su nueva posición.
En tu código, esta función se llama al principio de la función principal(), que se ejecuta 50 veces por segundo (según tu variable FPS). Esto asegura que:
El protagonista
Los enemigos
Las balas
La barra de vida
se redibujen limpiamente en cada frame, sin dejar rastros de sus posiciones anteriores.
El método clearRect() toma 4 parámetros:
Las coordenadas X e Y (0, 0 en este caso) desde donde empezar a borrar
El ancho y alto del área a borrar (todo el canvas en este caso)
Sin esta función, verías un efecto de "estela" detrás de todos los elementos móviles del juego.
Comentarios
Publicar un comentario