Я просто пытаюсь подбросить мяч на ту же высоту, на которой он был изначально. Но как только я ввожу время, а не кадр, я где-то теряю импульс.
Сократив код до минимума, у меня есть следующее:
public void onDrawFrame(GL10 gl) {
float timeDelta = System.currentTimeMillis() - startTime;
startTime = System.currentTimeMillis();
update(timeDelta);
}
float gravity = -1.0f;
float PosY = 2400;
float VelocityY = 0;
public void update(float timeDelta){
PosY+=VelocityY;
if(PosY<=0){
VelocityY=Math.abs(VelocityY);
} else{
VelocityY+=gravity*timeDelta;
}
Log.d(SystemSingleton.sLogDebug,String.format("Pos: y%f. y%f, timeDelta: %f",PosY, VelocityY, timeDelta));
}
Я оставил дельту времени в миллисекундах (вместо деления на 1000, чтобы получить секунды, как вы ожидаете), чтобы убедиться, что я ничего не теряю из-за приведения или округления.
Если я игнорирую timeDelta и просто применяю всю гравитацию в каждом кадре, это работает нормально, пик его отскока будет ровно 2400 (это начальная позиция). Но, принимая во внимание timedelta, она всегда меньше 2400 и медленно деградирует, а затем время от времени подскакивает на значительную величину (иногда намного выше 2400), прежде чем снова начнет деградировать.
Я, очевидно, получил что-то совершенно неправильно, но я не вижу этого.
Любая помощь приветствуется.