Próbuję symulować grawitację w mojej pierwszej grze Xna 2d. Mam następującyXna dodawanie grawitacji do sprite'a 2d
//Used for Jumping
double elapsedAirTime = 0.0;
double maxAirTime = 8.35;
//End Jumping
Więc staram się przenieść ikonki przez pewien okres, gdy elapsedAirTime < maxAirTime Jednak istnieje jakiś problem z mojego kodu tylko wydaje się przesuwać ikonki się raz, a nie wielokrotność razy w tym okresie czasu. tutaj jest kod w mojej klasie "player.cs" lub metoda aktualizacji klasy.
if (newState.IsKeyDown(Keys.Space))
{
if(oldState.IsKeyUp(Keys.Space))
{
//if we are standing or jumping then change the velocity
if (playerState == PlayerStates.Standing)
{
playerState = PlayerStates.Jumping;
this.position.Y -= (float)(30.0 + ((1.2)*elapsedAirTime)*elapsedAirTime);
}
}
}
//if we are jumping give it some time
if (playerState == PlayerStates.Jumping)
{
if ((elapsedAirTime < maxAirTime) && position.Y < 3)
{
this.position.Y -= (float)(30.0 + ((1.2) * elapsedAirTime)*elapsedAirTime);
elapsedAirTime += gameTime.ElapsedGameTime.TotalSeconds;
}
//otherwise time to fall
else
{
playerState = PlayerStates.Falling;
}
}
//add gravity to falling objects
if (playerState == PlayerStates.Falling || playerState == PlayerStates.Standing)
{
//if we are above the ground
if (this.position.Y < windowBot - 110)
{
//chnage state to falling
playerState = PlayerStates.Falling;
this.position.Y += 3.0f + ((float)(gameTime.ElapsedGameTime.TotalSeconds));
}
else
{
playerState = PlayerStates.Standing;
elapsedAirTime = 0.0f;
}
}
Każda pomoc jest doceniana, proszę i dziękuję!
Po co obliczać czasScalar i przechowywać starą godzinę gry?Jeśli ta funkcja aktualizacji zostanie wywołana w każdej pętli gry (tak jak powinna być), gt.ElapsedGameTime wykona już dla ciebie wszystkie ciężkie ćwiczenia. –
Powodem użycia timeScalar jest a) jeśli chcesz zmienić domyślną liczbę klatek na sekundę, lub b) jeśli twój komputer jest tak wolny, że nie może nadążyć za domyślnymi 60 próbami UPS/FPS XNA. W obu przypadkach, jeśli nie otrzymasz docelowej częstotliwości aktualizacji, twoja gra będzie wyglądać tak, jakby była opóźniona bez kodu czasowegoScalar. – Darkhydro