Então, dado um sprite do sol no horizonte (x = 0, y = altura do mundo / 2), estou tentando criar uma função para fazer o sol nascer e depois cair.
A melhor maneira de fazer isso seria a função sin, mas não tenho idéia de como usá-lo.
se usando y = sin (x), x teria que variar entre 0 e pi para uma curva completa, mantendo uma velocidade constante para X.
Quaisquer pensamentos ou sugestões?
Edit: Obrigado pessoal!
fonte
Como Jimmy disse, uma elipse é provavelmente a melhor opção para esse movimento. Aqui estão algumas idéias sobre como realmente implementá-lo com um pouco mais de detalhes para os interessados.
Tomando tempo
Para iniciantes, você precisa de uma variável para acompanhar o tempo no mundo do jogo. Você pode implementá-lo como quiser, mas aqui está um exemplo. Vou usar uma variável chamada
hours
que varia de 0 a 24 (embora, quando chegue a 24, volte a 0).Ao contrário da vida real, considerarei que o dia começa às 0 horas e a noite às 12 horas. Isso facilitará alguns dos cálculos.
Também vou definir a taxa em que o tempo do jogo muda em relação ao tempo real. Neste exemplo, a cada dois minutos em tempo real corresponderá a uma hora no jogo.
Configuração
Agora, antes de definir o movimento do sol, precisamos especificar alguns de seus parâmetros. Em particular, em qual valor X ele eleva do horizonte e em qual valor X ele cai no horizonte. Além disso, o que Y corresponde ao horizonte, e quão alto ele deveria subir acima dessa linha.
Cálculo das coordenadas do sol
Agora é hora de calcular a posição do nosso sol para uma determinada hora do dia. Usarei a mesma função paramétrica usada por Jimmy, mas com o domínio variando entre [0..2PI] (para trazer o sol de volta à sua posição original ao amanhecer):
Essa é uma boa função porque o valor X varia de 0 a 1 e depois volta a 0 novamente (que mapearemos para os valores X de início e fim do sol) e o valor Y começa em 0 e move-se até 1 e vice-versa. para 0 novamente (que seria a nossa parte do dia ) e depois repete exatamente a mesma coisa no lado negativo antes de voltar à posição original (que seria a nossa noite, embora o sol não seja atraído neste momento).
O primeiro passo é escalar as horas do intervalo [0..24) para o intervalo da nossa função que é [0..2PI):
Em seguida, aplicamos as funções para recuperar os valores entre 0 e 1, como falei acima:
E finalmente escalamos esses valores usando os parâmetros do sol:
fonte