Когда я запускаю программу (это игра в понг), мяч остановился на мгновение (0,5-1 секунду), а затем продолжил его движение (движение мяча очень медленное)
это основной класс контроллера
Код: Выделить всё
package com.anas.pong;
import javafx.animation.AnimationTimer;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.layout.AnchorPane;
import javafx.scene.paint.Color;
import javafx.scene.shape.Circle;
import java.net.URL;
import java.util.ResourceBundle;
public class MainController implements Initializable {
private enum MoveTo {
bottomLeft,
topLeft,
topRight,
bottomRight
}
private MoveTo where;
private Circle ball;
int ballX, ballY;
@FXML
private AnchorPane mainPane;
@Override
public void initialize(URL url, ResourceBundle resourceBundle) {
// setting the ball
ball = new Circle();
ball.setRadius(13);
ball.setStroke(Color.BLACK);
ball.setFill(Color.BLACK);
// setting position of the ball
ball.setLayoutX(400);
ballX = 400;
ball.setLayoutY(300);
ballY = 300;
mainPane.getChildren().add(ball);
where = MoveTo.bottomLeft;
AnimationTimer movement = new AnimationTimer() {
@Override
public void handle(long l) {
// moving to ...
if (where.equals(MoveTo.bottomLeft))
bottomLeftMovement();
else if (where.equals(MoveTo.topLeft))
topLeftMovement();
else if (where.equals(MoveTo.topRight))
topRightMovement();
else if (where.equals(MoveTo.bottomRight))
bottomRightMovement();
else {
System.out.println("Nothing");
stop();
}
}
};
movement.start();
}
private void bottomLeftMovement() {
// go bottom
ball.setTranslateY(ball.getTranslateY()+2);
ballY += 2;
// go left
ball.setTranslateX(ball.getTranslateX()-2);
ballX -= 2;
if (ballY >= 600-13)
where = MoveTo.topLeft;
else if (ballX
Подробнее здесь: [url]https://stackoverflow.com/questions/79055947/how-to-prevent-lag-when-moving-a-circle-with-an-animationtimer-in-javafx[/url]