Ваша проблема в том, что вы пытаетесь анимировать падение шара, но вместо этого вы пишете алгоритм для определения его положения в течение определенного времени.
Это означает, что вы должны вывести свою переменную времени dt
полностью из уравнения и просто перемещать свой шар с каждой итерацией цикла , например:
while (true)
{
moveBall();
render();
try {
Thread.sleep(10)
} catch(InterruptedException e) {
e.printStackTrace();
}
}
Кроме того, слегка измените свои переменные:
// Add this to your variables
private final double GRAVITY = -9.8; // Final variables should be capitalized
private final double TERMINAL_VELOCITY = -30; // Whatever you want it to be
Вот основное изменение:
public void moveBall()
{
double diameter_y = height / 2.0;
double radius = (diameter_y / 2.0);
double velocity_y = speed * dt / 1e9;
distance_y = board.getHeight() - y;
if (distance_y - radius > 0)
{
isFalling = true;
}
if (isFalling)
{
if (height < distance_y)
{
if (velocity_y <= TERMINAL_VELOCITY)
velocity_y += GRAVITY; // implementing acceleration (gravity)
// just means adding it to velocity.
y += velocity_y;
}
Действительно, я не знаю, как это могло работать раньше.