La clase Game

La clase Game es el punto de entrada del motor. Crea la instancia del juego, contiene sus escenas y dependencias, y controla el bucle de juego.

Crear una instancia de Game

Una Game se crea a partir de un objeto de configuración. El elemento contenedor, el ancho y el alto son obligatorios:

import { Game } from "angry-pixel";

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

El motor crea un elemento <canvas> dentro de containerNode con el width y el height indicados.

Configuración

El objeto de configuración (GameConfig) acepta las siguientes opciones:

OpciónTipoObligatorioValor por defectoDescripción
containerNodeHTMLElementElemento HTML donde se crea el canvas del juego.
widthnumberAncho del juego en píxeles.
heightnumberAlto del juego en píxeles.
canvasColorstringNo"#000000"Color de fondo del canvas.
physicsFrameratenumberNo180Frecuencia de ejecución de la física. Valores permitidos: 60, 120, 180, 240. Una frecuencia mayor hace la física más precisa pero consume más recursos.
headlessbooleanNofalseDesactiva el renderizado, el audio y la entrada. Pensado para el desarrollo de servidores de juego.
debugobjectNoOpciones de visualización de depuración (ver más abajo).
collisionsobjectNoOpciones de detección de colisiones (ver más abajo).
dependencies[DependencyName, any][]NoDependencias externas accesibles mediante inyección de dependencias.

Opciones de depuración

El objeto debug activa ayudas de depuración en pantalla:

OpciónTipoValor por defectoDescripción
collidersbooleanfalseDibuja los colisionadores.
mousePositionbooleanfalseMuestra la posición del ratón.
textRendererBoundingBoxesbooleanfalseDibuja las cajas delimitadoras de los TextRenderer.
collidersColorstring"#00FF00"Color de los colisionadores.
textBoxColorstring"#0000FF"Color de la caja delimitadora del texto.
textColorstring"#00FF00"Color del texto de depuración.
textPosition"top-left" | "top-right" | "bottom-left" | "bottom-right""bottom-left"Posición del texto de depuración.

Opciones de colisión

El objeto collisions configura la detección de colisiones:

OpciónTipoValor por defectoDescripción
collisionMethodCollisionMethodsCollisionMethods.SATMétodo de detección: CollisionMethods.SAT o CollisionMethods.AABB.
collisionBroadPhaseMethodBroadPhaseMethodsBroadPhaseMethods.SpatialGridMétodo de fase amplia: BroadPhaseMethods.SpatialGrid o BroadPhaseMethods.QuadTree.
collisionMatrixCollisionMatrixPares de capas de colisión a las que se les permite colisionar.
import { Game, CollisionMethods, BroadPhaseMethods } from "angry-pixel";

const game = new Game({
    containerNode: document.getElementById("app")!,
    width: 1920,
    height: 1080,
    debug: {
        colliders: true,
        mousePosition: false,
        textRendererBoundingBoxes: false,
    },
    physicsFramerate: 180,
    collisions: {
        collisionMethod: CollisionMethods.SAT,
        collisionBroadPhaseMethod: BroadPhaseMethods.SpatialGrid,
        collisionMatrix: [
            ["player", "enemy"],
            ["player", "wall"],
        ],
    },
});

Agregar escenas

Las escenas se registran con addScene. Pasa la clase de la escena y un nombre. El tercer argumento la marca como la escena inicial, la que se carga cuando el juego arranca:

import { MainScene } from "./scene/MainScene";

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

Un juego puede registrar varias escenas, pero solo una se marca como la escena inicial.

Iniciar y detener el juego

start ejecuta el bucle de juego; stop lo detiene. La propiedad running indica si el bucle está activo.

game.start();

if (game.running) {
    game.stop();
}

Registrar dependencias

Se pueden poner dependencias personalizadas a disposición mediante inyección de dependencias. Registra una clase con addDependencyType, o una instancia existente con addDependencyInstance:

game.addDependencyType(MyService);
game.addDependencyInstance(myConfig, "MyConfig");

Las dependencias también pueden proporcionarse de antemano mediante la opción dependencies del objeto de configuración.

Modo headless

Establecer headless: true desactiva los sistemas de renderizado, audio y entrada. Este modo está pensado para ejecutar el motor en un servidor, donde no hay canvas ni entrada del usuario.