Edit: Eu corrigi o problema, tornando a jumpvelocity aquela que é modificada e adicionada e a yvelocity é igual à jumpvelocity * t. Isto é o que eu tenho agora:
if (GUI->Space && grounded){
jumpvelocity = -185.f * 2 / gravity;
grounded = false;
}
if(!grounded ){
if(jumpvelocity < terminaly){
jumpvelocity += 185.f * t * 4 / gravity;
yvelocity = jumpvelocity * t;
}
else{
jumpvelocity = terminaly;
yvelocity = jumpvelocity * t / gravity;
}
}
else{
yvelocity = 0.f;
jumpvelocity = 0.f;
}
Obrigado pela ajuda.
Estou tentando fazer minha gravidade funcionar. O código que eu tenho até agora é
if (jumpvelocity < 0){
yvelocity = jumpvelocity * t *2/gravity;
jumpvelocity += 185.f*t * 2 / gravity;
}
else if(!grounded ){
if(yvelocity < terminaly)
yvelocity += t / gravity;
else
yvelocity = terminaly;
}
A gravidade aumenta para cima, fazendo com que a queda e o salto sejam mais lentos. Seu valor padrão é 1. Jumpvelocity é definido como 185 quando o jogador deseja pular. Meu problema é que você cai mais devagar em uma taxa de quadros mais lenta, mas salta na mesma velocidade como se fosse uma taxa de quadros mais alta. Como eu faria com que o quadro fosse independente? T é tempo delta.
jumpvelocity
a média com o valor anterior ao atualizar yvelocity
, fornecendo um erro de precisão que piorará com menor taxa de quadros. O que você chama de yvelocity
fato deve ser, ymovement
pois é uma velocidade multiplicada pelo tempo. Você está atualizando jumpvelocity
quando o personagem não toca mais o chão, o que não tem significado físico. Sua verificação terminaly
é feita antes da atualização, causando jumpvelocity
um terminaly
aumento maior e piorando nas taxas de quadros inferiores.