El Input Manager

El Input Manager lee la entrada de cuatro fuentes: teclado, ratón, pantalla táctil y gamepads. Se lee dentro de los sistemas, normalmente en onUpdate.

En los sistemas que extienden GameSystem está disponible como this.inputManager. Consulta Componentes y sistemas personalizados.

import { GameSystem } from "angry-pixel";

export class InputSystem extends GameSystem {
    onUpdate() {
        if (this.inputManager.keyboard.isPressed("Space")) {
            // saltar
        }
    }
}

El Input Manager expone un objeto por cada fuente:

PropiedadFuente
keyboardTeclado
mouseRatón
touchScreenPantalla táctil
gamepadsGamepads conectados (array)

Nota: La entrada está desactivada en modo headless.

Teclado

Las teclas se identifican por su valor KeyboardEvent.code, como "Space", "KeyW" o "ArrowUp".

MiembroDescripción
pressedKeysArray de los códigos pulsados actualmente.
isPressed(code)true si la tecla está pulsada.
orPressed(codes)true si alguna de las teclas está pulsada.
andPressed(codes)true si todas las teclas están pulsadas.
isPressedReturn(code, ifTrue, ifFalse)Devuelve uno de dos valores según si la tecla está pulsada.
orPressedReturn(codes, ifTrue, ifFalse)Como isPressedReturn, para cualquiera de las teclas.
andPressedReturn(codes, ifTrue, ifFalse)Como isPressedReturn, para todas las teclas.
const { keyboard } = this.inputManager;

if (keyboard.isPressed("ArrowRight")) {
    // moverse a la derecha
}

if (keyboard.andPressed(["ControlLeft", "KeyC"])) {
    // ambas teclas pulsadas a la vez
}

Ratón

MiembroTipoDescripción
leftButtonPressedbooleanEstado del botón izquierdo.
scrollButtonPressedbooleanEstado del botón de scroll (central).
rightButtonPressedbooleanEstado del botón derecho.
positionInViewportVector2Posición del cursor en el viewport.
hasMovedbooleanSi el ratón se movió en este frame.
wheelScrollVector2Cantidad de desplazamiento de la rueda.
const { mouse } = this.inputManager;

if (mouse.leftButtonPressed) {
    const position = mouse.positionInViewport;
    // actuar en la posición del cursor
}

Pantalla táctil

MiembroTipoDescripción
touchingbooleanSi se está tocando la pantalla.
interactionsTouchInteraction[]Puntos de contacto activos.

Cada TouchInteraction tiene un positionInViewport (Vector2) y un radius (Vector2, el área del contacto).

const { touchScreen } = this.inputManager;

if (touchScreen.touching) {
    const touch = touchScreen.interactions[0];
    // gestionar el contacto en touch.positionInViewport
}

Gamepads

gamepads es un array de mandos conectados. Accede a uno por su índice, y protégete frente a que no exista:

const gamepad = this.inputManager.gamepads[0];

if (gamepad?.bottomFace) {
    // botón inferior (A en Xbox, B en Nintendo, X en PlayStation)
}

const move = gamepad?.leftStickAxes;

Un mando expone los siguientes miembros:

MiembroTipoDescripción
connectedbooleanSi el mando está conectado.
idstringIdentificador del mando.
indexnumberÍndice del mando.
bottomFace / rightFace / leftFace / topFacebooleanBotones frontales.
dpadUp / dpadDown / dpadLeft / dpadRightbooleanBotones del pad direccional.
dpadAxesVector2Pad direccional como eje.
leftShoulder / rightShoulderbooleanBotones superiores (shoulder).
leftTrigger / rightTriggerbooleanGatillos.
back / startbooleanBotones back y start.
leftStickButton / rightStickButtonbooleanBotones de pulsación de los sticks.
leftStickAxes / rightStickAxesVector2Posiciones de los sticks.
leftStickHorizontal / leftStickVerticalnumberValores de los ejes del stick izquierdo.
rightStickHorizontal / rightStickVerticalnumberValores de los ejes del stick derecho.
anyButtonPressedbooleanSi hay algún botón pulsado.
buttonsMap<number, boolean>Estados de botones sin procesar.
axesMap<number, number>Valores de ejes sin procesar.
vibrate(duration, weakMagnitude, strongMagnitude)Activa la vibración, si es compatible.
gamepad?.vibrate(200, 0.5, 0.5);