El módulo Input provee un sistema unificado para manejar eventos de teclado, ratón (mouse) y pantalla táctil (touch). Se encarga de rastrear el estado exacto de cada tecla/botón por frame, solucionando problemas comunes del DOM como la repetición automática de teclas o el seguimiento de múltiples dedos simultáneos.
Centraliza la lógica de controles del usuario para que tu objeto game solo necesite hacer preguntas simples por frame, como "¿Está saltando ahora?" o "¿Hizo clic en la pantalla?".
Siempre que tu juego requiera interacciones del usuario en tiempo real (moverse con flechas, disparar con espacio, tocar un botón en pantalla táctil).
Debes inicializar el módulo pasándole el elemento HTML donde se capturan eventos de ratón o táctiles. Si solo necesitas teclado, puedes pasar null.
// Manual - Engine pasa el canvas automáticamente en Engine.init()
Input.init(canvas);
// PIXIEngine y LittleEngine llaman RenderBridge.bindInput() tras crear el canvas
// LittleEngine lo hace en el callback de engineInitRetrocompatibilidad: Input, Audio y Online funcionan igual con Engine, PIXIEngine y LittleEngine. Para coordenadas lógicas del puntero en menús canvas, usa UICanvas.getPointer() (delega en RenderBridge.toGame()).
Importante: Los motores llaman Input.endFrame() automáticamente al final de cada frame. No lo llames manualmente salvo que implementes tu propio loop.
Usa los códigos de tecla de la API moderna de JS (KeyboardEvent.code).
Ejemplos: 'KeyW', 'ArrowUp', 'Space', 'Enter'.
Input.isDown(key) -> boolean¿Está la tecla mantenida presionada en este momento? (Útil para caminar, acelerar).Input.isPressed(key) -> boolean¿La tecla fue presionada justo en este frame? (Útil para saltar, disparar un solo proyectil, abrir un menú; evita que el jugador salte 60 veces por segundo por dejar pulsado el espacio).Input.isReleased(key) -> boolean¿La tecla fue soltada en este frame?
update(dt) {
if (Input.isDown('ArrowRight')) {
player.x += speed * dt; // Se mueve mientras la mantenga
}
if (Input.isPressed('Space')) {
player.jump(); // Salta solo una vez al presionar
}
}Input.getMouse() -> { x, y, down, px, py, pdown }Obtiene el estado actual del ratón.x, y: Coordenadas actuales respecto al elemento canvas.down:truesi el botón izquierdo está pulsado.px, py: Coordenadas del frame anterior.pdown: Estado del botón en el frame anterior.
Input.isMousePressed() -> boolean¿Se hizo clic justo en este frame?
update(dt) {
if (Input.isMousePressed()) {
const mouse = Input.getMouse();
spawnBullet(mouse.x, mouse.y);
}
}Soporta multitouch, permitiendo leer la posición independiente de cada dedo en la pantalla.
Input.getTouchCount() -> numberCantidad de toques (dedos) activos actualmente en la pantalla.Input.getTouch(index) -> { id, x, y }Obtiene la información de un toque específico (0 para el primero, 1 para el segundo, etc.).Input.isTouchStarted() -> boolean¿Se inició un nuevo toque en cualquier lugar de la pantalla en este frame? Útil como alternativa aisMousePressed()en móviles.
update(dt) {
// Si tocan la pantalla, ir a la posición del primer dedo
if (Input.getTouchCount() > 0) {
const touch = Input.getTouch(0);
player.targetX = touch.x;
player.targetY = touch.y;
}
}