Atualmente, estou criando um jogo em C # usando o Direct X 9.0. O remake do jogo é Donkey Kong NES. Eu tenho quase tudo concluído, mas estou tendo problemas com a física do salto de Mario. Eu tenho variáveis declaradas para as coordenadas Y e X.
Fiquei me perguntando se havia um método simples de fazer isso. Eu procurei alta e baixa por uma resposta, mas as respostas que encontrei são irrelevantes / ou estão usando uma linguagem de programação diferente, como o XNA.
Atualmente, tenho uma variável bool definida para verificar se W foi pressionado e isso acionará qualquer código para fazê-lo pular. Eu tenho mexido com coisas como.
if (jump == true)
{
Playerypos -= vel;
Playerxpos += vel;
}
O que não funcionou tão bem. Procurei em alto e baixo por uma resposta e agora estou desesperado, se alguém pudesse me apontar na direção certa para uma solução simples. Isso seria bom. Muito apreciado por quaisquer respostas.
Respostas:
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):
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:
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:
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/
fonte
Como na física. Somente no momento em que você pressiona
jump key
e o personagem está no chão, aumenta a velocidade (é chamado de impulso), mas faz o personagem cair pela gravidade o tempo todo.Se você não quer que o personagem pule toda vez que atinge o chão - porque você está segurando
jump key
- adicione umajump key is being pressed
variável que você limpa depoisjump key
é liberada e colocada depois. Pseudo-código:Se eu usasse o seu caminho:
Como
donkey.y
a mudança depende de sua imaginação. Velocidade deve ficar menor burro mais alto está no ar para torná-lo bom.fonte