Sto provando a simulare la gravità nel mio primo gioco xna 2d. Ho il seguenteXna aggiunge gravità a uno sprite 2d
//Used for Jumping
double elapsedAirTime = 0.0;
double maxAirTime = 8.35;
//End Jumping
Così sto cercando di spostare la sprite da una certa quantità, mentre l'elapsedAirTime < maxAirTime Tuttavia, c'è qualche problema in cui il mio codice sembra solo per spostare la sprite una volta e non più volte durante questo segmento di tempo. ecco il codice nella mia classe "player.cs", o il metodo di aggiornamento della classe.
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;
}
}
Qualsiasi aiuto è molto apprezzato, per favore e grazie!
Perché calcolare un timeScalar e memorizzare il tempo di gioco precedente?Se questa funzione di aggiornamento viene chiamata ogni ciclo di gioco (come dovrebbe essere), gt.ElapsedGameTime fa già tutto il lavoro pesante per te. –
Il motivo dell'utilizzo di timeScalar è a) se si desidera modificare la frequenza fotogrammi predefinita o b) se il computer è così lento da non riuscire a mantenere il 60 UPS/FPS XNA predefinito cercato. In entrambi i casi, se rimani indietro rispetto al tasso di aggiornamento del target, il tuo gioco sembrerà essere in ritardo senza il codice timeScalar. – Darkhydro