Так что проблема здесь действительно структурная, вы делаете ее более сложной, чем она должна быть.Это на самом деле больше математика, чем вопрос программирования.
Ваши координаты x и y начинаются с определенной позиции, а затем вы должны отрегулировать ее на основе определенного фактора.Вы будете регулировать положение на основе а).Скорость в то время и в).произвольная дробь, основанная на том, какие единицы измерения вы используете
Чтобы пройти все эти шаги, это действительно зависит от того, что вы делаете, но для простоты, скажем, у вас уже есть вычисления vx и vy (выВы можете понять это сами), ваш actionPerformed будет выглядеть так:
public void a...{
deltaX = vx * getTimeFraction();
deltaY = vy * getTimeFraction();
...
}
deltaX
и deltaY
- это фактическое расстояние, на которое вы собираетесь переместить мяч.Поэтому, чтобы переместить его, мы должны применить его к фактическим переменным x и y.
public void a...{
deltaX = vx * getTimeFraction();
deltaY = vy * getTimeFraction();
x += deltaX;
y += deltaY;
}
Это сместит x и y, deltaX и deltaY на расстояние соответственно.Обратите внимание, что если deltaX отрицателен, он будет двигаться влево, а если deltaY отрицателен, он сдвинет его вниз (или вверх, в зависимости от того, что вы считаете отрицательным)
Мы почти закончили, поэтомув этот момент мы должны определить, что getTimeFraction()
public double getTimeFraction(){
return 1 / iterationsPerSecond;
}
iterationsPerSecond
будет определяться как количество небольших движений, которые вы хотите в секунду.
Это охватывает все движенияОднако прямо перед этим вам нужно определить, что такое vx и vy, поэтому ваш конечный результат будет выглядеть примерно так:
public void a...{
calculateVelocities();
deltaX = vx * getTimeFraction();
deltaY = vy * getTimeFraction();
x += deltaX;
y += deltaY;
}