Tak więc, biorąc pod uwagę sprite'a ustawionego na horyzoncie (x = 0, y = worldheight / 2) Staram się opracować funkcję, dzięki której słońce wzejdzie, a potem spadnie.
Najlepszym sposobem, aby to zrobić, byłaby funkcja grzechu, ale nie mam pojęcia, jak jej używać.
jeśli użyjemy y = sin (x), to x musiałby mieścić się w zakresie od 0 do pi dla pełnej krzywej, przy stałej prędkości dla X.
Wszelkie myśli lub sugestie?
Edycja: Dzięki chłopaki!
źródło
Jak powiedział Jimmy, elipsa jest prawdopodobnie lepszym rozwiązaniem dla tego ruchu. Oto kilka pomysłów na to, jak go wdrożyć z nieco bardziej szczegółowymi informacjami dla zainteresowanych.
Poświęcać czas
Na początek potrzebujesz zmiennej, aby śledzić czas w świecie gry. Możesz to zaimplementować w dowolny sposób, ale oto przykład. Użyję zmiennej o nazwie,
hours
która zmienia się od 0 do 24 (chociaż gdy osiągnie 24, zawija się z powrotem do 0).Jednak w przeciwieństwie do prawdziwego życia, po prostu wezmę pod uwagę, że dzień zaczyna się o godzinie 0, a noc zaczyna się o godzinie 12. Ułatwi to niektóre obliczenia.
Zdefiniuję także szybkość zmian czasu gry w stosunku do czasu rzeczywistego. W tym przykładzie co dwie minuty czasu rzeczywistego odpowiadają jednej godzinie w grze.
Konfiguracja
Teraz przed ustawieniem ruchu Słońca musimy podać kilka jego parametrów. W szczególności przy jakiej wartości X podnosi się z horyzontu i przy jakiej wartości X spada do horyzontu. Ponadto, co Y odpowiada horyzontowi i jak wysoko ma on wznieść się powyżej tej linii.
Obliczanie współrzędnych Słońca
Teraz nadszedł czas, aby obliczyć położenie naszego słońca dla danej pory dnia. Zamiast tego użyję tej samej funkcji parametrycznej, której używał Jimmy, ale z domeną w zakresie od [0..2PI] (aby przywrócić słońce do pierwotnej pozycji przed świtem):
Jest to dobra funkcja, ponieważ wartość X zmienia się od 0 do 1, a następnie z powrotem do 0 (co będziemy mapować do początkowych i końcowych wartości naszego Słońca), a wartość Y zaczyna się od 0 i przesuwa się do 1 i wstecz ponownie do 0 (co byłoby naszą porą dzienną ), a następnie powtarza dokładnie to samo po stronie negatywnej przed powrotem do pierwotnej pozycji (która byłaby naszą nocą, chociaż słońce nie zostanie w tym momencie wyciągnięte).
Pierwszym krokiem jest skalowanie godzin z zakresu [0..24) do zakresu naszej funkcji, którym jest [0..2PI):
Następnie zastosujemy funkcje, aby odzyskać wartości od 0 do 1, o których mówiłem powyżej:
Na koniec skalujemy te wartości przy użyciu parametrów słońca:
źródło