Entonces, dado un sprite solar establecido en el horizonte (x = 0, y = altura mundial / 2) estoy tratando de idear una función para hacer que el sol salga y luego caiga.
La mejor manera de hacerlo sería la función pecado, pero no tengo idea de cómo usarla.
si usa y = sin (x), entonces x tendría que oscilar entre 0 y pi para una curva completa, mientras que tiene una velocidad constante para X.
¿Alguna idea o sugerencia?
Editar: Gracias chicos!
fuente
Como Jimmy dijo, una elipse es probablemente una mejor opción para este movimiento. Aquí hay algunas ideas sobre cómo implementarlo realmente con un poco más de detalle para los interesados.
Tomando tiempo
Para empezar, necesitas una variable para hacer un seguimiento del tiempo en el mundo del juego. Puede implementarlo de la manera que desee, pero aquí hay un ejemplo. Usaré una variable llamada
hours
que varía de 0 a 24 (aunque cuando llega a 24 vuelve a 0).Sin embargo, a diferencia de la vida real, consideraré que el día comienza a las 0 horas y la noche comienza a las 12 horas. Esto facilitará algunos de los cálculos.
También definiré la velocidad a la que cambia el tiempo del juego en relación con el tiempo real. En este ejemplo, cada dos minutos de tiempo real corresponderá a una hora en el juego.
Configuración
Ahora, antes de configurar el movimiento de nuestro sol, necesitamos especificar algunos de sus parámetros. En particular, a qué valor X sube del horizonte, y a qué valor X cae en el horizonte. Además, lo que Y corresponde al horizonte, y qué tan alto se supone que debe elevarse por encima de esa línea.
Cálculo de las coordenadas del sol
Ahora es el momento de calcular la posición de nuestro sol para un momento determinado del día. Usaré la misma función paramétrica utilizada por Jimmy pero con el dominio que va desde [0..2PI] en su lugar (para que el sol vuelva a su posición original al amanecer):
Esta es una buena función porque el valor X varía de 0 a 1 y luego nuevamente a 0 (que asignaremos a los valores X iniciales y finales de nuestro sol) y el valor Y comienza en 0 y sube a 1 y regresa a 0 nuevamente (que sería nuestra porción del día ) y luego repite exactamente lo mismo en el lado negativo antes de volver a la posición original (que sería nuestra noche, aunque el sol no se dibujará en este punto).
El primer paso es escalar las horas desde el rango [0..24) al rango de nuestra función que es [0..2PI):
A continuación, aplicamos las funciones para recuperar los valores entre 0 y 1 que mencioné anteriormente:
Y finalmente escalamos esos valores usando los parámetros del sol:
fuente