0

私はsimonが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 (または同様のもの) についての言及を見ましたが、その使用方法を理解できませんでした。

お時間をいただきありがとうございます!

4

1 に答える 1

1

メソッドを呼び出すとすぐにAnAnimationが開始されますplay。ループはアニメーションが待機する時間に比べて短い時間で実行されるため、すべてのイベントが (ほぼ) 同時に発生します。

a を使用してs を順番SequentialTransitionに再生できます。Animation

次のコードは、 の色を繰り返し変更する 1 つの方法を示しています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();
}

ただし、あなたの場合、すべての s に異なる値を使用して、すべてKeyFrameの s を同じアニメーションに単純に追加できます。色が変わる時間として簡単に使用できます。TimelineKeyFrameDuration.millis(1000*i + 500)

于 2016-05-08T20:25:24.117 に答える