Há uma coisa que me intriga, e é como implementar um salto 'impulsivo' em um jogo de plataformas. Se você não sabe do que estou falando, pense nos saltos de Mario, Kirby e Quote from Cave Story. O que eles têm em comum? Bem, a altura do seu salto é determinada por quanto tempo você mantém o botão de salto pressionado.
Sabendo que os "impulsos" desses personagens são construídos não antes do salto, como na física real, mas no ar - ou seja, você pode muito bem levantar o dedo no meio da altura máxima e ele irá parar, mesmo que com desaceleração entre ele e o ponto final; é por isso que você pode simplesmente dar um pulo e segurá-lo por um longo salto -, estou impressionado com a forma como eles mantêm suas trajetórias como arcos.
Minha implementação atual funciona da seguinte maneira:
Enquanto o botão de salto é pressionado, a gravidade é desativada e a coordenada Y do avatar é diminuída pelo valor constante da gravidade. Por exemplo, se as coisas caírem em Z unidades por tick, aumentará Z unidades por tick.
Quando o botão é liberado ou o limite é atingido, o avatar desacelera em uma quantidade que o faria cobrir X unidades até que sua velocidade atinja 0; quando isso acontece, ele acelera até sua velocidade corresponder à gravidade - seguindo o exemplo, eu poderia dizer que acelera de 0 a Z unidades / tick enquanto ainda cobre X unidades.
Essa implementação, no entanto, faz saltos muito na diagonal e, a menos que a velocidade do avatar seja mais rápida que a gravidade, o que tornaria muito rápido no meu projeto atual (ele se move a cerca de 4 pixels por tick e a gravidade é de 10 pixels por tick, em uma taxa de quadros de 40FPS), também a torna mais vertical do que horizontal. Aqueles familiarizados com os jogadores de plataforma notariam que o arco do personagem quase sempre os permite pular mais, mesmo que não sejam tão rápidos quanto a gravidade do jogo, e quando isso não acontecer, se não for jogado corretamente, provará ser muito contra-intuitivo. Sei disso porque pude atestar que minha implementação é muito irritante.
Alguém já tentou mecânica semelhante e talvez até tenha conseguido? Eu gostaria de saber o que está por trás desse tipo de salto de plataforma. Se você nunca teve alguma experiência com isso anteriormente e quer experimentar, tente não corrigir ou aprimorar minha implementação explicada, a menos que eu esteja no caminho certo - tente criar sua solução a partir de coçar, arranhão. Não me importo se você usa a gravidade, a física ou outros enfeites, desde que mostre como esses pseudo-impulsos funcionam, ele faz o trabalho.
Além disso, gostaria que sua apresentação evitasse uma codificação específica de idioma; tipo, compartilhando um exemplo em C ++, ou Delphi ... Por mais que eu esteja usando a estrutura XNA para o meu projeto e não me importe com coisas em C #, não tenho muita paciência para ler o código de outros, e estou certos desenvolvedores de jogos de outros idiomas estariam interessados no que alcançamos aqui, então não se importe em aderir ao pseudo-código.
Obrigado de antemão.