En primer lugar, XNA también usa C # también, por lo que es el mismo lenguaje de programación. Y aunque la API subyacente puede tener algunas diferencias con DirectX, eso no tiene nada que ver con el salto, por lo que los mismos tutoriales o respuestas deberían aplicarse aquí. Además, existen numerosas formas de implementar esto, dependiendo de muchos factores. Lo que describiré a continuación es solo una de las posibilidades.
Requisitos básicos de física
Primero necesita algunas variables físicas básicas y cálculos en su ciclo de actualización. En particular, debe definir la posición, la velocidad y la gravedad, y su ciclo de actualización debería estar haciendo algo similar a esto (detección de colisión y respuesta omitida por simplicidad):
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 de altura fija
Ahora, la forma más fácil de implementar un salto que siempre tenga la misma altura, sin importar cuánto tiempo presione la tecla, es simplemente cambiar la velocidad vertical una vez. Esto hará que el personaje comience a elevarse, mientras que la gravedad se encargará automáticamente de derribarlo:
void OnJumpKeyPressed()
{
velocityY = -12.0f; // Give a vertical boost to the players velocity to start jump
}
Importante : no quieres poder comenzar un salto si tu personaje no está en el suelo, por lo que deberás agregar un cheque para eso.
Salto de altura variable
Pero los juegos como Mario y Sonic tienen un salto variable donde la altura del salto depende de cuánto tiempo presiona el botón. En este caso, deberá manejar presionando y soltando la tecla de salto. Podrías agregar algo como:
void OnJumpKeyReleased()
{
if(velocityY < -6.0f) // If character is still ascending in the jump
velocityY = -6.0f; // Limit the speed of ascent
}
Al ajustar todos estos valores (es decir, los números como 0.5
, -12.0f
o -6.0f
) en el código anterior, puede cambiar la sensación de su salto, qué tan alto salta, cuánto impulso mantiene incluso después de soltar el botón de salto, qué tan rápido cae, etc. .
Importante No llame a estas funciones cada cuadro. Llámelos solo una vez cuando se presione o suelte la tecla. De lo contrario, tu personaje volará en lugar de saltar.
Ejemplo de trabajo
Acabo de crear un ejemplo rápido de las técnicas descritas anteriormente, que puede probar en su navegador aquí (presione el botón del mouse para saltar, suéltelo a la mitad para controlar la altura del salto). Está en JS, pero como mencioné anteriormente, el lenguaje es irrelevante en este caso.
http://jsfiddle.net/LyM87/