Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mensajes - renrojo

1
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?
2
Cita de: Black_Cat en Diciembre 06, 2019, 03:19:02 PM
Lo que pasa es que en el caso solucion, la funcion dibuja una sola cadena, que es la que se está añadiendo caracter por caracter. Se limpia la pantalla y pasa al siguiente step.
Se dibuja un caracter mas, pero sigue siendo una sola cadena. Se limpia la pantalla y pasa al siguiente step, asi consecutivamente.

En el caso del for, dependiendo de cuantos ciclos haga el for, se va a ejecutar N veces por step. Por lo que si tenés un draw_string dentro del for, se va a dibujar N veces la misma cadena por step, lo cual desemboca en el efecto ese de negrita. Porque son muchos dibujos superpuestos.

Excelentes sus respuestas, fueron muy amables.
¡Muchas gracias! :)
3
Cita de: BssString en Diciembre 06, 2019, 01:00:37 PM
Hola renrojo

La diferencia es que el ciclo "for" ocurre de principio a fin en el mismo Step, por eso ves la string dibujada completa, porque el "for" llega hasta el final del string en 1 Step.

La forma de usar una variable e incrementarla va a ser igual o diferente dependiendo de cómo incrementas la variable, si la incrementas en el Step Event o en el Draw Event 1 vez por Step, entonces ahí sí lograrás el efecto que buscas y verás que la string se va dibujando letra por letra. Porque cada 2 steps te dibujará la letra que sigue en vez de TODO en el mismo step.

De hecho lo que pienso que te pasó en el ciclo "for" es que si tu string mide 10 carácteres, el ciclo for te hace 10 dibujos al mismo tiempo.
Primero dibuja una letra, luego la primera y la segunda, luego la 1ra, 2da y 3ra, etc hasta dibujarlas todas, entonces las primeras letras se dibujan varias veces en el mismo step, por eso las ves en Negrita.

Saludos

Buen día, muchas gracias por tu respuesta tan rápida.
Mi conclusión de lo que pasó con el for es exactamente lo que describís, pero sigo sin entender cómo funciona el evento Draw. ¿No debería suceder lo mismo en el caso solución? Lo digo, sobre todo, por la forma que tiene la instrucción string_copy, que requiere un parámetro para indicarle desde dónde debe empezar a copiar el texto, y al que yo determiné "1":
-En la primera ejecución del evento, copia los caracteres desde 1 hasta N (ejemplo: N=2) y los imprime en pantalla.
-En la tercera ejecución (N=3) vuelve a copiar desde 1 hasta N e imprimir el mismo string otra vez, pero con una letra más.
Sin embargo, no aparenta ser lo que está sucediendo. Se ve bien y no superpuesto. ¿Cómo hace Game Maker para saber que ya no debe mostrar los caracteres anteriores? ¿El evento Draw omite instrucciones o partes de instrucciones "draw_" que ya fueron ejecutadas previamente?

Edito: Investigando un poco, descubrí que el evento Draw limpia la pantalla antes de volver a dibujar en cada una de sus ejecuciones, así que mi respuesta puede estar ahí.
4
Intenté hacer que un string se muestre letra por letra. La idea fue usar una variable que se va incrementado de a 0.5 hasta llegar a la longitud total del string, usándola juntó a string_copy para ir copiando los caracteres en otra variable y haciendo un draw de esa variable. Pero después pensé que podía usar un for y usar su índice "i" en el string_copy.
El resultado de lo último: La string no se muestra letra por letra, sino que aparece completamente y varias veces en el mismo lugar (Superpuestas. El efecto es como el de una fuente en "negrita").
Recurrí a la primera solución que se me había ocurrido; es decir, usar una variable de instancia definida en el evento create, y el problema se solucionó.
Sin embargo, no veo la diferencia entre hacer una cosa y la otra. ¿Alguien podría explicármelo? Soy nuevo en GML.