У меня есть игра, в которой есть объект корабля (с полигонами JavaFX). Когда я перемещаю корабль своими ключами (через EventHandlers и AnimationTimers), он движется вверх. Когда я отпускаю его, он должен изменить ускорение на -4, и поэтому он постоянно отнимает -4 от скорости корабля до тех пор, пока он не достигнет 0. Однако, поскольку корабль может двигаться во всех направлениях, скорость иногда отрицательнакогда корабль движется вперед. Поэтому, когда я пытаюсь остановить корабль, когда скорость отрицательна, этого не происходит, и корабль продолжает двигаться назад.
Я попытался вычислить, когда скорость корабля отрицательна и движется вперед, но он получилнемного усложнение, и я считаю, что это не сработало.
Вот код для метода расчета скорости корабля x:
AnimationTimer calculateVelocityX = new AnimationTimer() {
@Override
public void handle(long now) {
if (getAcceleration() == 17)
setVelocityX(getVelocityX() + (Math.cos(Math.toRadians(getRotation())) * (getAcceleration() * 0.01)));
else if (acceleration == -4)
setVelocityX(getVelocityX() + (Math.cos(Math.toRadians(getTempRotation())) * (getAcceleration() * 0.01)));
}
};
AnimationTimer shipAccelerationTimer = new AnimationTimer() {
@Override
public void handle(long now) {
getShipImage().setLayoutX(getShipImage().getLayoutX() + getVelocityX());
getShipImage().setLayoutY(getShipImage().getLayoutY() - getVelocityY());
wrapShip();
if (getVelocityX() == 0 && getVelocityY() == 0) {
getCalculateVelocityX().stop();
getCalculateVelocityY().stop();
setAcceleration(17);
setCounterOne(0);
setCounterTwo(0);
setCounterThree(0);
getShipAccelerationTimer().stop();
}
}
};
Этот код переместит корабль назад, так как скорости не могут фактически достичь 0 из-за десятичной точности,Однако, если я скажу, когда скорость меньше 0, это невозможно из того, что я сказал выше.
Изображение знаков скорости, когда груз перемещается в указанном направлении:
https://i.stack.imgur.com/5sxNi.png
Поэтому я не могу просто иметь «когда скорость меньше 0», поскольку, как и в квадрантах 2, 3, 4, я могу двигаться вперед, но иметь отрицательные скорости x, y или оба.