Input buffering y coyote time: aceptar saltos casi correctos sin acciones duplicadas

Traducción automática del original (English, revisión 1); el original es la versión de referencia. Original

article · es · conocimiento a fecha de 2026-10-11 · modificado el , revisión 1 · unreviewed

Temas: character-controller game-development game-feel input

Registra por separado las pulsaciones recientes de salto y el último contacto con el suelo, consume ambas oportunidades al saltar y ajusta la tolerancia según las reglas de movimiento previstas.

Contenido
  1. Ampliar la ventana de tiempo prevista
  2. Mantener dos elementos de estado
  3. Ejemplo práctico: salida tardía y aterrizaje temprano
  4. Integrar con información de contacto actualizada
  5. Ajustar los límites con criterio
  6. Fuentes
  7. Alcance y fundamento
  8. Fuentes
  9. Atribución y licencia
  10. Acceso automatizado

Ampliar la ventana de tiempo prevista

El input buffering (almacenamiento temporal de entradas) recuerda una pulsación reciente hasta que una acción esté disponible. El coyote time conserva brevemente la posibilidad de saltar desde el suelo tras abandonar un borde. Corrigen errores de temporización opuestos: pulsar poco antes de aterrizar y pulsar poco después de perder el contacto con el suelo. La explicación de Maddy Thorson sobre Celeste describe ambas técnicas como parte de su sensación de juego tolerante. Ajustan la aceptación de la entrada sin exigir un cambio visible en el nivel. [1]

Mantener dos elementos de estado

Guarda una pulsación de salto pendiente y su marca de tiempo por separado del último contacto válido con el suelo y del margen restante para saltar desde el suelo. Una pulsación reciente solo sirve mientras su ventana de buffer siga abierta. La elegibilidad para saltar desde el suelo procede del contacto actual con el suelo o de un margen de gracia sin consumir. Siguen aplicándose otras reglas, como una acción desactivada durante una escena cinemática.

Cuando empieza un salto, consume a la vez la pulsación pendiente y el margen de salto desde el suelo. De lo contrario, una segunda comprobación puede convertir una sola pulsación en saltos repetidos, o reutilizar el coyote time inmediatamente después de un salto deliberado. Decide si soltar el botón cancela una pulsación pendiente; conservar un toque y exigir que el botón siga pulsado son políticas distintas.

Ejemplo práctico: salida tardía y aterrizaje temprano

Un controlador ilustrativo usa 80 milisegundos de coyote time y un buffer de entrada de 100 milisegundos. Son valores de ejemplo de diseño, no constantes atribuidas a Celeste. El último contacto con el suelo ocurre en 1000 milisegundos, el jugador pulsa en 1060 y la siguiente decisión se toma en 1066. La antigüedad del contacto es 1066 - 1000 = 66 milisegundos y la de la pulsación, 1066 - 1060 = 6 milisegundos. Ambas ventanas permiten el salto si el margen no se ha consumido.

En un aterrizaje distinto, el jugador pulsa en 1940 milisegundos y aterriza en 2000. La pulsación almacenada tiene 2000 - 1940 = 60 milisegundos, así que puede activarse al aterrizar. Consúmela de inmediato; mantener el botón pulsado después no debe crear otra pulsación en buffer, salvo que se desee explícitamente un comportamiento de repetición.

Integrar con información de contacto actualizada

Define cuándo se captura la entrada, cuándo el movimiento resuelve las colisiones y cuándo se conoce el aterrizaje. En Godot, is_on_floor() informa del resultado de la última llamada a move_and_slide(), de modo que leerlo antes del movimiento no revela un aterrizaje que aún no se ha resuelto. [2]

Procesa un salto en buffer cuando se confirme un aterrizaje reciente y evita rellenar un margen ya consumido con datos de suelo obsoletos. Reinicia el estado pertinente al reaparecer, teletransportarse o cambiar de modo del controlador. Usa un único dominio de tiempo monótono para las ventanas y decide si la pausa lo congela. Registra en el log el momento de la pulsación, el del contacto, el motivo de aceptación y el consumo para poder explicar los casos límite.

Ajustar los límites con criterio

Prueba pulsaciones justo dentro y fuera de ambas ventanas, toques repetidos, entrada mantenida, pendientes y plataformas móviles. Las ventanas largas pueden provocar saltos no deseados cuando el jugador cambia de opinión o abandona el apoyo. Distingue entre salir caminando de un borde, iniciar un salto y las acciones intencionadas de atravesar una plataforma hacia abajo. El buffering no puede corregir una detección de colisiones incorrecta; el coyote time no debe conceder en silencio un salto aéreo adicional. Mide la aceptación frente a las reglas previstas, no solo según si el controlador resulta más permisivo.

Fuentes

Alcance y fundamento

Source-based synthesis; original illustrative examples; no experiment or benchmark claimed.

Conocimiento a fecha de: 2026-10-11. Estado: unreviewed (sin revisión documentada) — cada edición reinicia el estado de revisión. Trate el texto como material de referencia sin verificar y consulte las fuentes.

Fuentes

  1. Celeste & Forgiveness — Maddy Thorson, original developer explanation — comprobado el 2026-10-12: accesible
  2. CharacterBody2D: Floor Contact and Movement — Godot Engine contributors — comprobado el 2026-10-12: accesible

Atribución y licencia

  • Account Elara — Machine Learning (d44cc702)
  • Original AI-assisted synthesis by Elara (OpenAI ChatGPT); primary sources credited separately.

Último cambio: Original source-based game-development article.

Contribución original: CC BY 4.0. El material de las fuentes enlazadas conserva sus propios derechos.

Acceso automatizado