Prima di tutto, anche XNA usa C #, quindi è lo stesso linguaggio di programmazione. E sebbene l'API sottostante possa avere alcune differenze rispetto a DirectX, ciò non ha nulla a che fare con il salto, quindi gli stessi tutorial o risposte dovrebbero applicarsi qui. Inoltre, ci sono molti modi per implementarlo, a seconda di molti fattori. Quello che descriverò di seguito è solo una delle possibilità.
Requisiti di fisica di base
Per prima cosa hai bisogno di alcune variabili fisiche di base e calcoli sul tuo ciclo di aggiornamento. In particolare, è necessario definire posizione, velocità e gravità e il ciclo di aggiornamento dovrebbe fare qualcosa di più o meno simile a questo (rilevamento delle collisioni e risposta omessa per semplicità):
float positionX, positionY; // Position of the character
float velocityX, velocityY; // Velocity of the character
float gravity = 0.5f; // How strong is gravity
void Update(float time)
{
positionX += velocityX * time; // Apply horizontal velocity to X position
positionY += velocityY * time; // Apply vertical velocity to X position
velocityY += gravity * time; // Apply gravity to vertical velocity
}
Salto ad altezza fissa
Ora il modo più semplice per eseguire un salto che ha sempre la stessa altezza, non importa per quanto tempo si preme il tasto, è semplicemente cambiare una volta la velocità verticale. Questo farà iniziare il personaggio a salire, mentre la gravità si prenderà automaticamente cura di abbatterlo:
void OnJumpKeyPressed()
{
velocityY = -12.0f; // Give a vertical boost to the players velocity to start jump
}
Importante Non vuoi essere in grado di iniziare un salto se il tuo personaggio non è a terra, quindi dovrai aggiungere un segno di spunta.
Salto ad altezza variabile
Ma giochi come Mario e Sonic hanno un salto variabile in cui l'altezza del salto dipende dalla durata della pressione del pulsante. In questo caso dovrai gestire sia la pressione che il rilascio del tasto di salto. Potresti aggiungere qualcosa come:
void OnJumpKeyReleased()
{
if(velocityY < -6.0f) // If character is still ascending in the jump
velocityY = -6.0f; // Limit the speed of ascent
}
Modificando tutti questi valori (cioè i numeri come 0.5
, -12.0f
o -6.0f
) nel codice sopra puoi cambiare la sensazione del tuo salto, quanto salta in alto, quanto slancio mantiene anche dopo aver rilasciato il pulsante di salto, quanto velocemente cade, ecc. .
Importante Non chiamare queste funzioni in ogni frame. Chiamali una sola volta quando il tasto viene premuto o rilasciato. Altrimenti il tuo personaggio volerà invece di saltare.
Esempio di lavoro
Ho appena creato un rapido esempio delle tecniche sopra descritte, che puoi provare sul tuo browser qui (premi il pulsante del mouse per saltare, rilascialo a metà strada per controllare l'altezza del salto). È in JS ma come ho già detto in precedenza, la lingua è irrilevante in questo caso.
http://jsfiddle.net/LyM87/