Saltar a contenido

La clase Game

La clase Game es el punto de entrada principal para crear y administrar una instancia de juego en Angry Pixel Engine.
Actúa como el coordinador central que gestiona:

  • Escenas.
  • Entidades.
  • Componentes.
  • Managers (renderizado, físicas, entrada, etc.).

Además, proporciona métodos para configurar el juego, agregar escenas y dependencias, y controlar el ciclo de ejecución (game loop).

Constructor

new Game(config: GameConfig)

El constructor recibe un objeto GameConfig que permite definir:

  • El nodo HTML donde se renderizará el juego (containerNode).
  • Dimensiones (width, height).
  • Opcional: ajustes de físicas, colores, métodos de colisiones, etc.

Ejemplo básico

const game = new Game({
    containerNode: document.getElementById("app"),
    width: 1920,
    height: 1080,
});

game.addScene(MainScene, "MainScene", true);
game.start();

Ejemplo avanzado

const game = new Game({
    containerNode: document.getElementById("app"),
    width: 1920,
    height: 1080,
    debugEnabled: false,
    canvasColor: "#000000",
    physicsFramerate: 180,
    collisions: {
        collisionMatrix: [
            ["layer1", "layer2"],
            ["layer1", "layer3"],
        ],
        collisionMethod: CollisionMethods.SAT,
        collisionBroadPhaseMethod: BroadPhaseMethods.SpartialGrid,
    },
});

game.addScene(MainScene, "MainScene", true);
game.start();

Detalle de GameConfig

El objeto GameConfig permite personalizar cómo se inicializa el juego.
A continuación, se describen todas las propiedades disponibles:

Propiedad Tipo Descripción
containerNode HTMLElement Nodo HTML donde se renderizará el juego. Obligatorio.
width number Ancho del juego en píxeles. Obligatorio.
height number Alto del juego en píxeles. Obligatorio.
debug object (opcional) Opciones de depuración. Permite mostrar colisionadores, posición del mouse y otros datos durante la ejecución.
debug.colliders boolean Mostrar colisionadores.
debug.mousePosition boolean Mostrar la posición del mouse.
debug.collidersColor string Color de los colisionadores. Predeterminado: #00FF00 (verde).
debug.textColor string Color de los textos de depuración. Predeterminado: #00FF00.
debug.textPosition string Posición del texto de depuración: "top-left", "top-right", "bottom-left" o "bottom-right".
canvasColor string Color de fondo del canvas. Predeterminado: #000000 (negro).
physicsFramerate number Frecuencia de actualización de físicas. Valores permitidos: 60, 120, 180 o 240. Predeterminado: 180.
headless boolean Activa el modo "headless". Desactiva entrada y renderizado (ideal para servidores).
dependencies Array Lista de dependencias externas que se inyectarán mediante dependency injection.
collisions object (opcional) Opciones de configuración de colisiones.
collisions.collisionMethod CollisionMethods Método de detección de colisiones: SAT o ABB. Predeterminado: SAT.
collisions.collisionMatrix Array Matriz que define qué capas pueden colisionar entre sí.
collisions.collisionBroadPhaseMethod BroadPhaseMethods Método de "broad phase": QuadTree o SpartialGrid. Predeterminado: SpartialGrid.

Nota: Si no se especifican algunas opciones, el motor usará los valores predeterminados recomendados.

Métodos

addScene(sceneType, name, openingScene = false)

Agrega una nueva escena al juego.

  • sceneType: la clase de la escena.
  • name: nombre para identificar la escena.
  • openingScene: si es true, esta será la primera escena al iniciar el juego.

Ejemplo:

game.addScene(MainScene, "MainScene", true);

addDependencyType(dependencyType, name?)

Agrega una clase que será usada como dependencia.

  • dependencyType: clase de la dependencia.
  • name: nombre de la dependencia (opcional si la clase usa el decorador injectable).

Ejemplo:

game.addDependencyType(MyCustomService);

addDependencyInstance(dependencyInstance, name)

Agrega una instancia específica como dependencia.

  • dependencyInstance: instancia a usar.
  • name: nombre de la dependencia.

Ejemplo:

game.addDependencyInstance(myDatabaseInstance, "Database");

start()

Inicia el juego y comienza el ciclo de actualización (game loop).

game.start();

stop()

Detiene el ciclo de actualización del juego.

game.stop();

Propiedades

running

Devuelve true si el juego está actualmente en ejecución.

if (game.running) {
    console.log("El juego está corriendo");
}

Resumen

La clase Game es responsable de:

✅ Inicializar la configuración y dependencias.
✅ Gestionar escenas.
✅ Controlar el ciclo de vida del juego (inicio y detención).
✅ Proveer un punto central para personalizar el comportamiento del motor.

Nota: Internamente, Game utiliza dependency injection para inicializar y comunicar todos los sistemas de juego.