Noticias

¡Ayuda a la Comunidad GM, haz una donación!

Comunidad Game Maker

Bienvenid@ a la comunidad hispana de Game Maker. Nuestro objetivo es crear videojuegos y dar soporte en castellano de GM. Para mejorar nuestro servicio hemos implantado, como adicion al reglamento general, algunas normas especificas en los subforos más comunes. ¡No olvides informarte antes de participar!.

Autor Tema: Duda sobre el funcionamiento de "lerp"  (Leído 291 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado renrojo

  • Visitante
  • *
  • Puntos: 10
  • Mensajes: 4
    • Ver Perfil
en: Diciembre 08, 2019, 05:58:35 pm
Buen día, comunidad.
Tengo una duda sobre cómo trabaja la función de interpolación linear cuando la utilizo con una variable que, al mismo tiempo, designo como primer parámetro. Por ejemplo:

unValor = lerp(unValor, 90, 0.3)

Vi que alguien utilizaba esto para rotar un sprite en 90 grados produciendo un movimiento "suave" y bonito, y tiene sentido: el valor de la variable (en este caso, "unValor") se iría aumentando cada vez más y acercándose a 90 en rangos cada vez más acotados, lo que causaría que la imagen se moviese "rápido" al principio de la animación y "lento" al final. Lo que yo no entiendo es cómo es posible que finalmente la variable se vuelva 90. Hice los cálculos en un cuaderno (después de hacer algunos gráficos, porque entender lo que hacía esta función me tomo un buen rato  :-[) y, a medida que continuaba interpolando, obtener el 30% de un rango cercano a 90 simplemente hacía que ese valor fuese cada vez más pequeño (89,992... 89,997...89,99934) pero nunca 90.
Hice un experimento y usé draw_text(x ,y, unValor...) y vi que la variable no tenía más de dos dígitos después de la coma, y que al acercarse al último número posible antes de tener que agregar otro dígito simplemente se volvía 90.

¿Game Maker redondea los números en este tipo de casos?
« última modificación: Diciembre 08, 2019, 06:01:31 pm por renrojo »

 


No Tienes Permisos Para Dar Puntos
point 0 Puntos

Este tema no recibió puntos.


Desconectado Clamud

Respuesta #1 en: Diciembre 08, 2019, 07:03:41 pm
Así es, de esa forma nunca alcanza el valor 90, pero se acerca tanto que no se nota la diferencia.

 


Desconectado BssString

Respuesta #2 en: Diciembre 12, 2019, 03:33:48 am
Hola renrojo

Tal como dice Clamud, nunca llega a 90.
Lo que puedes hacer es multiplicar el resultado por 100 (o 1000), luego redondeas con la función "round" y luego divides por el mismo número que multiplicaste para hacer que tu resultado se aproxime a 2 o 3 decimales.

Así cuando superes el 89.995. Game Maker lo convierta a 90.
Porque al multiplicar por 100 te queda:
8999,5 y al redondear se hace 9000.
Si divides por 100 de nuevo, te queda 90.

Ojo que el redondeo de Game Maker no funciona de forma convencional para el decimal 0.5. A veces redondea hacia arriba y otras veces hacia abajo.
El resto de decimales se redondea como es de esperar.

Saludos