Olá!
Estou tentando fazer um sprite pular tendo em consideração a gravidade, mas não consigo. Quando vou simular no greenfoot ele trava.
Aqui está o meu código. Obrigada!
Coloquei comentário no que tentei fazer para facilitar a compreensão.
public void act(){
if (Greenfoot.isKeyDown("space")) {
pula();
}
}
private void pula() {
double h0 = getY(); //posição inicial
double g = 1.5; //gravidade
int t = 1; //retorna a posição final de 1 em 1 segundo
double h = 0; //posição final
double v0 = -0.5; // velocidade inicial, considerando que é contrária ao movimento
double altura = getY()-5; // altura máxima que eu quero que chegue.
while(h!=altura||h<=altura){
h = h0+v0*t+0.5*g*t*t; //posicao final recebe nova posição.
v0 = v0+g*t; // velocidade inicial aumenta
h0 = h;
x = getX();
y = getY()+(int) h0;
setLocation(x,y); //retornaria a posição nesse momento
}
}
Bem, o que tentei fazer foi o seguinte.
Não incrementei o t porque queria que acontecesse de 1 em 1 segundo. Ou seja, a posição inicial, recebe a posição final e acaba recomeçando dali o movimento que vai durar 1 segundo.
Daí coloquei um limite de altura, pois quando a posição final chegar nessa altura, é hora de descer.
Onde estou errando?