【问题标题】:JavaFX animating simon says, cant figure out timingJavaFX 动画西蒙说,无法弄清楚时间
【发布时间】:2016-05-08 14:46:45
【问题描述】:

我正在用 javaFX 编写一个西蒙说游戏,我遇到了动画序列的问题。我不知道如何对按钮的动画进行排队(这些是突出显示的弧线)

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(或类似的东西),但我不知道如何使用它。

感谢您的宝贵时间!

【问题讨论】:

    标签: animation time javafx wait pause


    【解决方案1】:

    Animation 将在您调用 play 方法后立即启动。由于与动画应该等待的时间相比,循环运行的时间很短,因此所有事件(几乎)同时发生。

    您可以使用SequentialTransition 顺序播放Animations。

    以下代码演示了一种重复更改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();
    }
    

    但是,在您的情况下,您可以简单地将所有KeyFrames 添加到相同的Timeline 动画中,并对所有KeyFrames 使用不同的值。您可以简单地使用Duration.millis(1000*i + 500) 作为颜色变化的时间。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-02-08
      • 2013-05-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-02
      相关资源
      最近更新 更多