Я пытаюсь сделать игру «Дудл-змейка» в Java. Я хочу, чтобы змейка двигалась на 1 плитку каждые 0,5 секунды, и при этом у нее все еще была возможность регулировать направление с клавиатуры. Я использую объект Timeline
для отображения каждого кадра, но когда я использую его, ключевое событие не может быть извлечено с клавиатуры. В чем проблема и как ее исправить, спасибо. Вот код ниже: Функциональность игры работает нормально, просто не работает ключевое событие.
private BorderPane main = new BorderPane();
private Pane gamePane = new Pane();
private int score;
private SnakeBody snake;
private Point food;
private Timeline mainLoop;
public static void main(String[] args) {
launch(args);
}
@Override
public void start(Stage stage) {
snake = new SnakeBody(DEFAULT_DIMENSION, START_LENGTH, Snake.LEFT);
Scene scene = new Scene(main, 500, 500);
scene.getStylesheets().add("one/Snake/SnakeStyle.css");
stage.setTitle("Snake");
stage.setScene(scene);
stage.show();
scene.setOnKeyPressed(e -> {
// Add System.out.println(), there is no response
switch (e.getCode()) {
case UP:
snake.setNext(Snake.UP);
break;
case DOWN:
snake.setNext(Snake.DOWN);
break;
case LEFT:
snake.setNext(Snake.LEFT);
break;
case RIGHT:
snake.setNext(Snake.RIGHT);
break;
}
});
mainLoop = new Timeline(new KeyFrame(Duration.millis(500),
e -> {
if (snake.isLoss())
mainLoop.stop();
interfaceSetup();
drawSnake();
drawFood();
snake.move();
if (snake.getFood(food)) {
score++;
snake.acquireFood();
food = null;
}
}));
mainLoop.setCycleCount(Timeline.INDEFINITE);
mainLoop.play();
main.widthProperty().addListener(ov -> interfaceSetup());
main.heightProperty().addListener(ov -> interfaceSetup());
}