Spring

Spring es un resorte críticamente amortiguado, para animar valores de la interfaz sin depender del frame rate.

Uso

<script>
  import { useTask } from '@threlte/core'
  import { Spring } from 'essentia-core'

  const spring = new Spring({ stiffness: 16 })
  let moving = $state(false)

  useTask((delta) => {
    spring.step(delta)
    if (spring.settled) moving = false
  }, { running: () => moving })
</script>

Conviene avanzarlo desde un useTask que corra solo mientras no está settled: así la escena sigue en render on-demand.

Referencia

MiembroTipoDefaultDescripción
targetnumber—Valor al que tiende el resorte. Cambiarlo no salta: el valor lo sigue en step.
stiffnessnumber—Frecuencia natural omega en rad/s.
precisionnumber—Tolerancia de reposo en las unidades del valor.
valuenumber—Valor actual.
velocitynumber—Velocidad actual en unidades por segundo.
settledboolean—true si el valor llegó al target y no se mueve: no hace falta seguir avanzándolo.
step(dt: number) => number—Avanza el resorte dt segundos y devuelve el valor nuevo. Un dt <= 0 no cambia nada. Sin allocations.
set(value: number) => this—Salta a value sin animar: valor y target iguales, velocidad 0.

Anterior: Cámara y proyección