TilemapCollider

El componente TilemapCollider genera formas de colisión a partir de los bordes de un tilemap. Funciona junto con un TilemapRenderer en la misma entidad. Consulta Física para una visión general.

Cuando composite es false, crea un colisionador rectangular individual por cada tile del borde. Cuando composite es true, genera segmentos de línea conectados que siguen los bordes exteriores del tilemap, lo cual es más eficiente.

Opciones

OpciónTipoValor por defectoDescripción
compositebooleantrueGenera segmentos de línea conectados a lo largo de los bordes exteriores en lugar de un colisionador por tile.
offsetVector2(0, 0)Desplazamiento respecto a la posición de la entidad.
layerstring""La capa de colisión a la que pertenece el colisionador.
physicsbooleantrueSi es true, el colisionador interactúa con los cuerpos rígidos.
ignoreCollisionsWithLayersstring[][]Capas que este colisionador ignora.

Nota: Las formas del colisionador se generan una sola vez. Para volver a generarlas después de que el tilemap cambie, hay que llamar a refresh (ver más abajo).

Ejemplo

import { Transform, TilemapRenderer, TilemapCollider } from "angry-pixel";

this.entityManager.createEntity([
    new Transform(),
    new TilemapRenderer({
        tileset: {
            image: this.assetManager.getImage("tileset.png"),
            tileWidth: 16,
            tileHeight: 16,
        },
    }),
    new TilemapCollider({ composite: true, layer: "Ground" }),
]);

Actualizar los colliders en tiempo de ejecución

Las formas de los colliders se generan una sola vez, a partir de los datos de los tiles del TilemapRenderer. Después de que el tilemap cambie en tiempo de ejecución, hay que llamar a refresh para que se generen de nuevo.

this.entityManager.getComponent(entity, TilemapCollider).refresh();

Esta operación es costosa, no debe llamarse en cada frame.