JavaFX动画simon说,搞不清时间



我在javaFX中写一个simon-says游戏,我遇到了设置序列动画的问题。我不知道如何排列按钮的动画(突出显示的弧线)

if (mootor.isArvutiKäik()){
                mootor.genereeriuus(); 
                for(int i = 0; i < mootor.getJärjend().size(); i++){
                    if(mootor.getJärjend().get(i)==0){
                        punane.setFill(Color.RED);
                        Timeline timeline = new Timeline(new KeyFrame(
                                Duration.millis(500),
                                ae -> punane.setFill(Color.RED.darker())));
                        timeline.play();
                    } else if (mootor.getJärjend().get(i)==1) {
                        roheline.setFill(Color.GREEN.brighter());
                        Timeline timeline = new Timeline(new KeyFrame(
                                Duration.millis(500),
                                ae -> roheline.setFill(Color.GREEN)));
                        timeline.play();
                    } else if (mootor.getJärjend().get(i)==2) {
                        sinine.setFill(Color.BLUE);
                        Timeline timeline = new Timeline(new KeyFrame(
                                Duration.millis(500),
                                ae -> sinine.setFill(Color.BLUE.darker())));
                        timeline.play();
                    } else {
                        kollane.setFill(Color.YELLOW);
                        Timeline timeline = new Timeline(new KeyFrame(
                                Duration.millis(500),
                                ae -> kollane.setFill(Color.YELLOW.darker())));
                        timeline.play();
                    }
                    PauseTransition test = new PauseTransition(Duration.millis(500));
                    test.play();
                }
                //mootor.setArvutiKäik(false);
            }

该代码生成一个从0到3的整数,并根据该整数高亮显示与该数字对应的圆弧。然而,现在,所有生成的整数和圆弧都会同时高亮显示。我看到提到了platform.runlater(或类似的东西),但我不知道如何使用它。

感谢您抽出时间!

一旦调用play方法,就会启动Animation。由于与动画应该等待的时间相比,循环运行的时间很短,因此所有事件(几乎)都同时发生。

您可以使用SequentialTransition按顺序播放Animation

以下代码演示了一种重复更改Rectangle:颜色的方法

@Override
public void start(Stage primaryStage) {
    Rectangle rect = new Rectangle(50, 50);
    Button btn = new Button("start");
    btn.setOnAction((ActionEvent event) -> {
        SequentialTransition sequence = new SequentialTransition();
        List<Color> colors = Arrays.asList(Color.RED, Color.GREEN, Color.BLUE, Color.YELLOW);
        for (Color color : colors) {
            PauseTransition transition = new PauseTransition(Duration.millis(500));
            transition.setOnFinished(evt -> rect.setFill(color));
            sequence.getChildren().add(transition);
        }
        sequence.play();
    });

    Scene scene = new Scene(new VBox(rect, btn));
    primaryStage.setScene(scene);
    primaryStage.show();
}

然而,在您的情况下,您可以简单地将所有KeyFrame s添加到同一Timeline动画中,在所有KeyFrame s中使用不同的值。您可以简单使用Duration.millis(1000*i + 500)作为颜色更改的时间。

最新更新