Primeiro de tudo, o XNA também usa C # também, por isso é a mesma linguagem de programação. E embora a API subjacente possa ter algumas diferenças em relação ao DirectX, isso não tem nada a ver com salto, portanto, os mesmos tutoriais ou respostas devem ser aplicados aqui. Além disso, existem várias maneiras de implementar isso, dependendo de muitos fatores. O que descreverei abaixo é apenas uma das possibilidades.
Requisitos básicos de física
Primeiro, você precisa de algumas variáveis físicas básicas e cálculos no seu loop de atualização. Em particular, você precisa de posição, velocidade e gravidade definidas, e seu loop de atualização deve estar fazendo algo semelhante a isso (detecção e resposta de colisão omitidas por simplicidade):
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 fixa
Agora, a maneira mais fácil de implementar um salto que sempre tem a mesma altura, não importa quanto tempo você pressiona a tecla, é simplesmente alterar a velocidade vertical uma vez. Isso fará com que o personagem comece a subir, enquanto a gravidade cuidará automaticamente de derrubá-lo:
void OnJumpKeyPressed()
{
velocityY = -12.0f; // Give a vertical boost to the players velocity to start jump
}
Importante Você não deseja iniciar um salto se o seu personagem não estiver no chão, portanto, será necessário adicionar uma verificação.
Salto de altura variável
Mas jogos como Mario e Sonic têm um salto variável, onde a altura do salto depende de quanto tempo você pressiona o botão. Nesse caso, você precisará lidar com pressionar e liberar a tecla de salto. Você pode adicionar algo como:
void OnJumpKeyReleased()
{
if(velocityY < -6.0f) // If character is still ascending in the jump
velocityY = -6.0f; // Limit the speed of ascent
}
Ajustando todos esses valores (ou seja, os números como 0.5
, -12.0f
ou -6.0f
) no código acima, você pode alterar a sensação do seu salto, quão alto ele salta, quanto impulso ele mantém mesmo depois de soltar o botão de salto, quão rápido ele cai, etc. .
Importante Não chame essas funções de todos os quadros. Ligue para eles apenas uma vez quando a tecla for pressionada ou liberada. Caso contrário, seu personagem voará em vez de pular.
Exemplo de trabalho
Acabei de criar um exemplo rápido das técnicas descritas acima, que você pode experimentar no seu navegador aqui (pressione o botão do mouse para pular, solte-o no meio para controlar a altura do salto). Está em JS, mas como mencionei anteriormente, a linguagem é irrelevante neste caso.
http://jsfiddle.net/LyM87/