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
| Miembro | Tipo | Default | Descripción |
|---|---|---|---|
target | number | — | Valor al que tiende el resorte. Cambiarlo no salta: el valor lo sigue en step. |
stiffness | number | — | Frecuencia natural omega en rad/s. |
precision | number | — | Tolerancia de reposo en las unidades del valor. |
value | number | — | Valor actual. |
velocity | number | — | Velocidad actual en unidades por segundo. |
settled | boolean | — | 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. |