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 estrue
, 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 decoradorinjectable
).
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.