Как я могу изменить изображение каждую n секунду - PullRequest
0 голосов
/ 09 января 2020

Это мой код

    ImageView contImg = new ImageView();
    Timeline timeline = new Timeline(
    new KeyFrame(javafx.util.Duration.ONE, new KeyValue(contImg.imageProperty(), cartas.get(0).getImg())),
    new KeyFrame(javafx.util.Duration.ONE, new KeyValue(contImg.imageProperty(), cartas.get(1).getImg())),
    new KeyFrame(javafx.util.Duration.ONE, new KeyValue(contImg.imageProperty(), cartas.get(2).getImg())),
    new KeyFrame(javafx.util.Duration.ONE, new KeyValue(contImg.imageProperty(), cartas.get(3).getImg())));

    timeline.play();

, но проблема в том, что изображение не меняется (cartas - это Arraylist, где у каждой корзины есть атрибут как изображение)

1 Ответ

3 голосов
/ 09 января 2020

Ваш подход к использованию временной шкалы для изменения свойства изображения является правильным, но ваша длительность неверна.

Вы используете Duration.ONE , что:

A Длительность 1 миллисекунда.

Так что это не каждые N секунд, как вы sh.

Чтобы получать каждые n секунд, используйте:

Duration.seconds(n)

Другая проблема заключается в том, что вы устанавливаете ключевые кадры так, чтобы все они запускались одновременно, а это не то, что вам нужно. Длительность ключевого кадра основана на времени, прошедшем для всего цикла временной шкалы, а не только с момента последнего ключевого кадра.

Итак, сложив это вместе, вы можете получить следующий код, который будет делать то, что вы хотите:

final int NUM_FRAMES = 4;
final int PAUSE_BETWEEN_FRAMES = 5;

ImageView imageView = new ImageView();
Timeline timeline = new Timeline();
List<Image> images = List.of(/** initialize your images here **/);

for (int i = 0; i < NUM_FRAMES; i++) {
    timeline.getKeyFrames().add(
        new KeyFrame(
            Duration.seconds(i * PAUSE_BETWEEN_FRAMES), 
            new KeyValue(imageView.imageProperty(), images.get(i))
        )
    );
}

timeline.setCycleCount(Timeline.INDEFINITE);
timeline.play();

List.of(elements..) - это конструкция Java 9 для инициализации списка, используйте что-то еще, если вы не используете Java 9+.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...