Referencia 12 tipos IMAGE_BUTTON

Animaciones hover

Las animaciones hover se aplican a elementos IMAGE_BUTTON cuando el cursor pasa sobre ellos. Cada tipo tiene su propio comportamiento y parámetro de intensidad.

Cómo se usan

Propiedades de animación en IMAGE_BUTTON
- id: "mi-boton"
  type: IMAGE_BUTTON
  x: 0
  y: 0
  width: 64
  height: 64
  properties:
    texture: "eventui:textures/ui/btn.png"
    hover_animation: "zoom_in"              # tipo de animación
    hover_animation_intensity: "1.15"       # intensidad (varía por tipo)
    hover_animation_duration: "200"         # duración en ms (default: 200)
    hover_animation_easing: "ease_out"      # curva de aceleración
    action: "open:mi-pantalla"
Solo se aplica una animación de transformación por elemento a la vez. Si defines múltiples en una lista separada por comas, el sistema usa la primera que no sea glow. El glow puede combinarse con cualquier otra porque se renderiza en una capa separada.

Curvas de aceleración — easing

Controlan cómo progresa la animación en el tiempo:

ValorComportamiento
linearVelocidad constante de inicio a fin.
ease_inEmpieza lento, termina rápido.
ease_outEmpieza rápido, termina lento. Default.
ease_in_outLento al inicio y al final, rápido en el medio.

Tipos disponibles

zoom_in
Transformación de escala
Crece desde su tamaño original hasta el factor de escala indicado.
Intensity: factor de escala → "1.15" = crece un 15%
zoom_out
Transformación de escala
Encoge desde su tamaño original. Inverso de zoom_in.
Intensity: factor de encogimiento → "0.85" = encoge 15%
shake
Traslación horizontal
Vibración horizontal que se amortigua al final. Efecto de "temblor".
Intensity: amplitud en píxeles → "3.0" = 3px de vibración
bounce
Traslación vertical
Salta hacia arriba con un arco sinusoidal y vuelve a su posición.
Intensity: altura del salto → "1.5" = salto moderado
rotate
Rotación 2D
Gira el elemento desde 0° hasta el ángulo máximo en el eje Z.
Intensity: ángulo máximo en grados → "15" = 15°
swing
Rotación oscilatoria
Oscila de lado a lado continuamente mientras el cursor está encima.
Intensity: amplitud de oscilación → "1.0" = ±15° de base
float
Traslación vertical continua
Flotación suave arriba y abajo mientras el cursor está encima.
Intensity: amplitud de flotación → "1.0" = ±5px
wave
Traslación diagonal continua
Movimiento ondulante en X e Y simultáneamente con frecuencias distintas.
Intensity: amplitud de la onda → "1.0" = ±3px en X e Y
heartbeat
Escala pulsante
Pulso de escala continuo que simula un latido. También acepta el alias pulse.
Intensity: amplitud del pulso → "1.0" = latido sutil (×1.1 máx)
jelly
Deformación elástica
Deforma el elemento comprimiendo un eje mientras expande el otro, efecto gelatinoso.
Intensity: amplitud de deformación → "1.0" = deformación moderada
spin_3d
Rotación 3D continua
Gira el elemento en el eje Y (como una tarjeta dando vueltas) mientras el cursor está encima.
Intensity: velocidad de giro → "1.0" = velocidad base
glow
Efecto de brillo
Halo dorado alrededor del elemento. Se combina con cualquier otra animación.
Sin parámetro de intensidad. El brillo máximo es fijo (alpha 40%).

Detalles por tipo

zoom_in y zoom_out

Ambas usan la misma lógica de escala. La diferencia es que zoom_out usa el complemento de la intensidad (2.0 - intensity) para encoger en lugar de crecer.

Ejemplos de intensidad
# Crece un 5% — efecto muy sutil, ideal para botones pequeños
hover_animation: "zoom_in"
hover_animation_intensity: "1.05"

# Crece un 15% — efecto notorio
hover_animation: "zoom_in"
hover_animation_intensity: "1.15"

# Crece un 20% — efecto pronunciado
hover_animation: "zoom_in"
hover_animation_intensity: "1.20"

shake

La vibración es horizontal y se amortigua progresivamente — empieza fuerte y termina en reposo. El patrón sigue una función sin(progress × π × 6) × intensity × (1 - progress).

Ejemplos de intensidad
# Vibración ligera (2px)
hover_animation: "shake"
hover_animation_intensity: "2.0"

# Vibración fuerte (5px) — útil para botones de peligro o alerta
hover_animation: "shake"
hover_animation_intensity: "5.0"

bounce

El salto sigue un arco sinusoidal (|sin(progress × π)| × intensity × 3). El elemento sube y vuelve exactamente a su posición original.

Ejemplos de intensidad
# Rebote suave
hover_animation: "bounce"
hover_animation_intensity: "1.5"

# Rebote alto
hover_animation: "bounce"
hover_animation_intensity: "3.0"

rotate

Gira el elemento desde 0° hasta el ángulo indicado. La rotación es permanente mientras el cursor está encima — no oscila de vuelta.

Ejemplo
# Rotación de 15° — efecto inclinado
hover_animation: "rotate"
hover_animation_intensity: "15"

# Rotación de 360° — vuelta completa lenta
hover_animation: "rotate"
hover_animation_intensity: "360"
hover_animation_duration: "800"

swing

Oscilación continua mientras el cursor está encima. A diferencia de rotate, no para — el elemento sigue oscilando mientras el hover esté activo. La fórmula usa el tiempo del sistema (sin(time × 0.003) × intensity × 15°).

float

Flotación vertical continua y suave mientras el cursor está encima. Basada en el tiempo del sistema (sin(time × 0.002) × intensity × 5px). Ideal para logotipos o elementos decorativos que quieras que "respiren".

wave

Movimiento ondulante en ambos ejes simultáneamente con frecuencias levemente distintas en X e Y, lo que genera una trayectoria orgánica no repetitiva a corto plazo.

heartbeat / pulse

Ambos nombres apuntan al mismo tipo. Pulso de escala continuo basado en el valor absoluto de un seno (|sin(time × 0.004)| × intensity × 0.1). La escala máxima real es 1.0 + intensity × 0.1.

Ejemplo
# Pulso muy sutil — como un corazón latiendo
hover_animation: "heartbeat"
hover_animation_intensity: "1.0"   # escala máx ≈ 1.10

# Pulso pronunciado
hover_animation: "heartbeat"
hover_animation_intensity: "3.0"   # escala máx ≈ 1.30

jelly

Deformación elástica que comprime el eje X mientras expande el Y y viceversa, creando el efecto de una gelatina. Usa la misma frecuencia en ambos ejes pero signos opuestos. La deformación máxima real es intensity × 0.1.

spin_3d

Gira el elemento en el eje Y (como una tarjeta dando vuelta) usando una transformación 3D (Axis.YP.rotationDegrees). La velocidad depende del tiempo y la intensidad (time × intensity × 0.1 mod 360°). Mientras mayor la intensidad, más rápido gira.

glow

El único tipo que no modifica la transformación del elemento — en su lugar renderiza un halo dorado (#FFD700) de 3px alrededor. El brillo aparece y desaparece gradualmente con un fade de 0.05 por frame. Se puede combinar con cualquier otro tipo:

Combinando glow con zoom_in
# Separados por coma — zoom_in se aplica, glow se renderiza encima
hover_animation: "zoom_in,glow"
hover_animation_intensity: "1.1"

Tabla de referencia rápida

Tipo Alias Continuo Intensidad Default recomendado
zoom_inNoFactor de escala"1.15"
zoom_outNoFactor de encogimiento"0.85"
shakeNoAmplitud en px"3.0"
bounceNoAltura del salto"1.5"
rotateNoÁngulo máximo en °"15"
swing✅ SíAmplitud de oscilación"1.0"
float✅ SíAmplitud vertical en px"1.0"
wave✅ SíAmplitud de la onda"1.0"
heartbeatpulse✅ SíAmplitud del pulso"1.0"
jelly✅ SíAmplitud de deformación"1.0"
spin_3d✅ SíVelocidad de giro"1.0"
glow✅ SíSin parámetro
Continuo significa que la animación no para mientras el cursor esté sobre el elemento — sigue ejecutándose indefinidamente. Las no continuas se ejecutan una vez por entrada del cursor y quedan en el estado final hasta que el cursor sale.