Donc, étant donné un sprite solaire fixé à l'horizon (x = 0, y = worldheight / 2), j'essaie de concevoir une fonction pour faire lever, puis tomber le soleil.
La meilleure façon de le faire serait la fonction sin, mais je ne sais pas comment l'utiliser.
si vous utilisez y = sin (x), alors x devra être compris entre 0 et pi pour une courbe complète, tout en ayant une vitesse constante pour X.
Des pensées ou des suggestions?
Edit: Merci les gars!
la source
Comme Jimmy l'a dit, une ellipse est probablement mieux adaptée à ce mouvement. Voici quelques idées sur la façon de l'implémenter avec un peu plus de détails pour les personnes intéressées.
Prendre du temps
Pour commencer, vous avez besoin d'une variable pour garder une trace du temps dans le monde du jeu. Vous pouvez l'implémenter comme bon vous semble, mais voici un exemple. J'utiliserai une variable appelée
hours
qui varie de 0 à 24 (bien que lorsqu'elle atteint 24, elle revient à 0).Contrairement à la vraie vie, je considérerai simplement que la journée commence à 0 heure et que la nuit commence à 12 heures. Cela facilitera certains calculs.
Je définirai également la vitesse à laquelle le temps de jeu change par rapport au temps réel. Dans cet exemple, toutes les deux minutes de temps réel correspondront à une heure de jeu.
Configuration
Maintenant, avant de régler le mouvement de notre soleil, nous devons spécifier quelques-uns de ses paramètres. En particulier, à quelle valeur X monte-t-elle de l'horizon et à quelle valeur X tombe-t-elle à l'horizon. De plus, ce que Y correspond à l'horizon et à quelle hauteur est-il censé s'élever au-dessus de cette ligne.
Calcul des coordonnées du soleil
Il est maintenant temps de calculer la position de notre soleil pour une heure donnée de la journée. J'utiliserai à la place la même fonction paramétrique utilisée par Jimmy mais avec un domaine allant de [0..2PI] (afin de ramener le soleil à sa position d'origine au lever du jour):
C'est une bonne fonction car la valeur X varie de 0 à 1, puis de nouveau à 0 (que nous allons mapper aux valeurs X de début et de fin de notre soleil) et la valeur Y commence à 0 et monte à 1 et retour à 0 à nouveau (ce qui serait notre portion de jour ), puis répète exactement la même chose du côté négatif avant de revenir à la position d'origine (qui serait notre nuit bien que le soleil ne soit pas attiré à ce stade).
La première étape consiste à mettre à l'échelle les heures de la plage [0..24) à la plage de notre fonction qui est [0..2PI):
Ensuite, nous appliquons les fonctions pour récupérer les valeurs entre 0 et 1 dont j'ai parlé ci-dessus:
Et enfin, nous mettons à l'échelle ces valeurs en utilisant les paramètres du soleil:
la source